在 thinkphp 8 学生管理后台,用 class_id 限定班级,再用 paginate() 返回指定页。示例要求已有后台身份校验、数据库配置和 student 表,调用者的班级访问权限由现有授权层检查。
先验证班级 ID 和页码
把方法放在已受后台权限保护的控制器中,接收 GET 参数。用整数验证拒绝小数和带字母的输入。
public function index()
{
$classId = filter_var(request()->get('class_id'), FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1],
]);
$page = filter_var(request()->get('page', 1), FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1],
]);
if ($classId === false || $page === false) {
return json(['message' => '班级和页码必须为正整数'], 422);
}
$students = \think\facade\Db::name('student')
->field('id,name,class_id')
->where('class_id', $classId)
->order('id', 'desc')
->paginate(['list_rows' => 10, 'page' => $page]);
return json($students->toArray());
}

如果老师账号只能查看指定班级,要在查询前检查当前用户是否拥有该班级权限。示例按唯一 ID 排序,方便对照两页记录。
把列表入口映射到现有控制器
在已配置后台鉴权的路由组中注册。以下假设 Student 控制器对应当前应用的 student。
use think\facade\Route;
Route::get('students', 'student/index');

以项目现有分组前缀为准。前端从分页对象的 data 数组渲染行,并根据 total、current_page 等字段控制分页。
用正常班级、空班级和非法输入验证
使用有权限的测试账号访问同一个接口。
GET /students?class_id=3&page=1 GET /students?class_id=3&page=2 GET /students?class_id=999&page=1 GET /students?class_id=3x&page=1

前两次都应只出现班级 3 的记录。若 999 为获准查询但没有学生的测试班级,data 应为空数组。最后一条应收到 HTTP 422。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











