thinkphp6.0之验证场景和路由验证

一、验证场景

1、验证场景设置,将特定的场景下是否进行验证,独立验证不存在场景验证

2、举一个简单的例子,新增数据需要验证邮箱,而修改更新时不验证邮箱

3、可以在验证类Students.php中,设置一个$scene属性,用来限定场景验证

protected $scene=[
    'insert' =>['name','upass','email'],
    'edit'   =>['name','price'],
];

4、insert新增需要验证三个字段,而edit更新则只要验证两个字段

5、在控制器端验证时,根据不听的验证手段,绑定相关场景进行验证即可

validate(Students::class)->scene('insert')->check([
                'uname'     =>'name',
                'upass'     =>'1000'
            ]);

6、可以在验证类端设置一个公共方法对场景的细节进行定义

public function sceneEdit()
{
    $edit=$this->only(['uname','upass'])
                ->remove('upass','nubmer');
                ->append('upass','require');
    return $edit;            
}

7、不能对一个字段进行两次或以上的移除和添加,会被覆盖

二、路由验证

1、在路由的参数来调用验证类进行验证,和字段验证一模一样

protected $rule = [ 
'id' => 'number|between:1,10' 
];
protected $message = [ 
'id.between' => 'id 只能是1-10 之间', 
'id.number' => 'id 必须是数字' 
];

Route::rule('vr/:id','Verify/route') 
->validate(\app\validate\User::class, 'route');

2、如果不使用验证器类,也可以使用独立的验证方式,也可以使用对象化

Route::rule('vr/:id','Verify/route') 
->validate([
 'id' => 'number|between:1,10', 
 'email' => \think\validate\ValidateRule::isEmail() 
 ], null, [ 
 'id.between' => 'id 限定在1-10 之间', 'email' => '邮箱格式错误'
  ], true);

你可能感兴趣的:(#,thinkphp6.0学习)