## 验证器 MixPHP 的验证器结合了多个框架的优点,如下: - 支持场景控制。 - 验证成功后字段将赋值为验证类的属性,文件则直接实例化为文件对象。 - 更细粒度的错误消息设置。 - 支持在 WebSocket 开发中使用。 ## 验证器定义 我们定义一个 `\apps\index\models\UserForm` 验证器类用于 `User` 控制器的验证。 ~~~ <?php namespace apps\index\models; use mix\validators\Validator; class UserForm extends Validator { public $name; public $age; public $email; // 规则 public function rules() { return [ 'name' => ['string', 'maxLength' => 25, 'filter' => ['trim']], 'age' => ['integer', 'unsigned' => true, 'min' => 1, 'max' => 120], 'email' => ['email'], ]; } // 场景 public function scenarios() { return [ 'create' => ['required' => ['name'], 'optional' => ['email', 'age']], ]; } // 消息 public function messages() { return [ 'name.required' => '名称不能为空.', 'name.maxLength' => '名称最多不能超过25个字符.', 'age.integer' => '年龄必须是数字.', 'age.unsigned' => '年龄不能为负数.', 'age.min' => '年龄不能小于1.', 'age.max' => '年龄不能大于120.', 'email' => '邮箱格式错误.', ]; } } ~~~ >[danger] 如果没有定义错误提示信息,则使用系统默认的提示信息 ## 数据验证 在需要进行 `User` 验证的控制器方法中,添加如下代码即可: ~~~ <?php namespace apps\index\controllers; use apps\index\models\UserForm; use mix\facades\Request; use mix\http\Controller; class UserController extends Controller { public function actionCreate() { app()->response->format = \mix\http\Response::FORMAT_JSON; // 使用模型 $model = new UserForm(); $model->attributes = Request::get() + Request::post(); $model->setScenario('create'); if (!$model->validate()) { return ['code' => 1, 'message' => 'FAILED', 'data' => $model->getErrors()]; } // 执行保存数据库 // ... // 响应 return ['code' => 0, 'message' => 'OK']; } } ~~~ ## 验证失败 验证失败可以通过以下方法获取错误消息: - $model->getErrors() :获取全部错误信息,返回数组。 - $model->getError() :获取单条错误信息,返回字符串。 ## 验证成功 验证成功后,验证规则中通过验证的字段,将会赋值到同名的验证类的属性中,未通过的字段则为 `null`。 这个功能有什么用? >[success] 有了这个功能,我们就只需要把真个验证类的对象传入模型,就可以在模型里安全的使用这些属性操作数据库。