method()) { case 'GET': // 列表查询参数 $rules = [ 'username' => 'nullable|string|max:200', 'real_name' => 'nullable|string|max:30', 'email' => 'nullable|string|max:200', 'phone_number' => 'nullable|string|max:11', 'role' => 'nullable|integer|in:2,3', 'status' => 'nullable|integer|in:0,1,2,3', 'sex' => 'nullable|integer|in:0,1,2', 'grade_id' => 'nullable|integer|min:0', 'parent_id' => 'nullable|integer|min:0', 'class_id' => 'nullable|integer|min:0', ]; break; case 'POST': // 创建学生 $rules = [ 'username' => 'required|string|max:200|unique:student,username', 'real_name' => 'nullable|string|max:30', 'password' => 'required|string|min:6|max:20', 'role' => 'required|integer|in:2,3', 'grade_id' => 'nullable|integer|min:0', 'parent_id' => 'nullable|integer|exists:student,id', 'email' => 'nullable|email|max:200|unique:student,email', 'phone_number' => 'nullable|string|max:11|unique:student,phone_number', 'title' => 'nullable|string|max:200', 'avatar' => 'nullable|string|max:200', 'status' => 'nullable|integer|in:0,1,2,3', 'vip_level' => 'nullable|integer|min:0', 'sex' => 'nullable|integer|in:0,1,2', 'qq' => 'nullable|string|max:20', 'examing_number' => 'nullable|string|max:50', ]; break; case 'PUT': case 'PATCH': // 更新学生 $studentId = $this->route('id'); $rules = [ 'username' => 'nullable|string|max:200|unique:student,username,' . $studentId, 'real_name' => 'nullable|string|max:30', 'password' => 'nullable|string|min:6|max:20', 'role' => 'nullable|integer|in:2,3', 'grade_id' => 'nullable|integer|min:0', 'parent_id' => 'nullable|integer|exists:student,id', 'email' => 'nullable|email|max:200|unique:student,email,' . $studentId, 'phone_number' => 'nullable|string|max:11|unique:student,phone_number,' . $studentId, 'title' => 'nullable|string|max:200', 'avatar' => 'nullable|string|max:200', 'status' => 'nullable|integer|in:0,1,2,3', 'vip_level' => 'nullable|integer|min:0', 'sex' => 'nullable|integer|in:0,1,2', 'qq' => 'nullable|string|max:20', 'examing_number' => 'nullable|string|max:50', ]; break; } return $rules; } /** * 获取特定的验证错误消息 * @return array */ protected function getSpecificMessages(): array { return [ 'username.required' => '用户名不能为空', 'username.max' => '用户名最多200个字符', 'username.unique' => '用户名已存在', 'real_name.max' => '真实姓名最多30个字符', 'password.required' => '密码不能为空', 'password.min' => '密码长度至少6位', 'password.max' => '密码长度最多20位', 'role.required' => '角色不能为空', 'role.in' => '角色值无效', 'grade_id.integer' => '年级ID必须是整数', 'grade_id.min' => '年级ID不能小于0', 'parent_id.integer' => '家长ID必须是整数', 'parent_id.exists' => '家长不存在', 'email.email' => '邮箱格式不正确', 'email.max' => '邮箱最多200个字符', 'email.unique' => '邮箱已存在', 'phone_number.max' => '手机号最多11个字符', 'phone_number.unique' => '手机号已存在', 'title.max' => '头衔最多200个字符', 'avatar.max' => '头像URL最多200个字符', 'status.in' => '状态值无效', 'vip_level.integer' => 'VIP等级必须是整数', 'vip_level.min' => 'VIP等级不能小于0', 'sex.in' => '性别值无效', 'qq.max' => 'QQ号最多20个字符', 'examing_number.max' => '考号最多50个字符', ]; } /** * 获取字段名称 * @return array */ public function attributes(): array { return [ 'username' => '用户名', 'real_name' => '真实姓名', 'password' => '密码', 'role' => '角色', 'grade_id' => '年级ID', 'parent_id' => '家长ID', 'email' => '邮箱', 'phone_number' => '手机号', 'title' => '头衔', 'avatar' => '头像', 'status' => '状态', 'vip_level' => 'VIP等级', 'sex' => '性别', 'qq' => 'QQ号', 'examing_number' => '考号', 'class_id' => '班级ID', ]; } /** * 配置验证器 * @param \Illuminate\Validation\Validator $validator * @return void */ public function withValidator($validator): void { $validator->after(function ($validator) { // 如果是创建学生并且指定了家长,验证家长必须是家长角色 if ($this->method() === 'POST' && $this->parent_id) { $parent = Student::find($this->parent_id); if ($parent && $parent->role !== Student::ROLE_PARENT) { $validator->errors()->add('parent_id', '指定的家长用户角色不正确'); } } // 如果是学生角色,不能指定自己为家长 if ($this->role === Student::ROLE_STUDENT && $this->parent_id) { $studentId = $this->method() === 'POST' ? 0 : $this->route('id'); if ($this->parent_id == $studentId) { $validator->errors()->add('parent_id', '不能指定自己为家长'); } } }); } }