$request->validate () 和 $this->validate () 有什么区别?
我的理解
$this->validate 是因为所有控制器都使用了 ValidatesRequests Trait,所以可以使用这个 Trait 中提供的 validate() 方法
那 \App\Http\Requests 里的 validate() 方法是从哪里来的?最终实现是相同的吗?为什么会有两种写法?(我知道 Validator::make() 是为了在 控制器外边用)
Laravel 代码如下:
$request->validate()
protected function validateLogin(\App\Http\Requests $request)
{
$request->validate([ // <---- 看这行
'username' => 'required|string',
'password' => 'required|string',
'captcha' => ['required', 'captcha'],
], [
'captcha.required' => '验证码不能为空',
'captcha.captcha' => '请输入正确的验证码',
]);
}
$this->validate()
public function form(Request $request, $id)
{
$this->validate($request, [ // <---- 看这行
'title' => 'bail|required|string|between:2,32',
'url' => 'sometimes|url|max:200',
'picture' => 'nullable|string'
]);
return response('表单验证通过');
}
// validator() 是在helper.php中
生成一个ValidationFactory(Illuminate\Contracts\Validation\Factory)的实例,并将该实例的validate方法注册到$macros数组中。
但是注意,这个Illuminate\Contracts\Validation\Factory是一个接口类,一定在什么地方已经和一个具体类进行了绑定~ :speak_no_evil:
巧了,也是validator!说明手动生成验证器和使用$request->validate() 其实调用的方法是一样的。
绑定的类是Illuminate\Validation\Factory
关于 LearnKu
推荐文章: