加载中...

验证场景


验证场景

验证器重支持定义场景,并且验证不同场景的数据,例如:

  1. namespace app\index\validate;
  2. use think\Validate;
  3. class User extends Validate
  4. {
  5. protected $rule = [
  6. 'name' => 'require|max:25',
  7. 'age' => 'number|between:1,120',
  8. 'email' => 'email',
  9. ];
  10. protected $message = [
  11. 'name.require' => '名称必须',
  12. 'name.max' => '名称最多不能超过25个字符',
  13. 'age.number' => '年龄必须是数字',
  14. 'age.between' => '年龄只能在1-120之间',
  15. 'email' => '邮箱格式错误',
  16. ];
  17. protected $scene = [
  18. 'edit' => ['name','age'],
  19. ];
  20. }

然后可以在验证方法中制定验证的场景

  1. $data = [
  2. 'name' => 'thinkphp',
  3. 'age' => 10,
  4. 'email' => 'thinkphp@qq.com',
  5. ];
  6. $result = $this->validate($data,'app\index\validate\User.edit');
  7. if(true !== $result){
  8. // 验证失败 输出错误信息
  9. dump($result);
  10. }

如果你直接调用验证器类的话直接使用 scene 方法指定验证场景。

  1. namespace app\index\controller;
  2. use app\index\validate\User as UserValidate;
  3. use think\Controller;
  4. class Index extends Controller
  5. {
  6. public function index()
  7. {
  8. $data = [
  9. 'name' => 'thinkphp',
  10. 'email' => 'thinkphp@qq.com',
  11. ];
  12. $validate = new UserValidate;
  13. if (!$validate->scene('edit')->check($data)) {
  14. dump($validate->getError());
  15. }
  16. }
  17. }

可以单独为某个场景定义方法(方法的命名规范是scene+场景名),并且对某些字段的规则重新设置,例如:

  1. namespace app\index\validate;
  2. use think\Validate;
  3. class User extends Validate
  4. {
  5. protected $rule = [
  6. 'name' => 'require|max:25',
  7. 'age' => 'number|between:1,120',
  8. 'email' => 'email',
  9. ];
  10. protected $message = [
  11. 'name.require' => '名称必须',
  12. 'name.max' => '名称最多不能超过25个字符',
  13. 'age.number' => '年龄必须是数字',
  14. 'age.between' => '年龄只能在1-120之间',
  15. 'email' => '邮箱格式错误',
  16. ];
  17. // edit 验证场景定义
  18. public function sceneEdit()
  19. {
  20. return $this->only(['name','age'])
  21. ->append('name', 'min:5')
  22. ->remove('age', 'between')
  23. ->append('age', 'require|max:100');
  24. }
  25. }

主要方法说明如下:

方法名 描述
only 场景需要验证的字段
remove 移除场景中的字段的部分验证规则
append 给场景中的字段需要追加验证规则

如果对同一个字段进行多次规则补充(包括移除和追加),必须使用下面的方式:

  1. remove('field', ['rule1','rule2'])
  2. // 或者
  3. remove('field', 'rule1|rule2')

下面的方式会导致rule1规则remove不成功

  1. remove('field', 'rule1')
  2. ->remove('field', 'rule2')

还没有评论.