关于Laravel的表单验证,官方文档已经给出详细的用法,先略作总结。
Laravel的控制器基类BaseController使用ValidatesRequests trait,所以可以直接使用其validate方法进行数据验证。参数以此为\Illuminate\Http\Request request,验证规则数组,错误信息数组。每个视图都存在Illuminate\Support\MessageBag error变量,用于存储验证的错误信息。
validate(Request $request, array $rules, array $messages = [], array $customAttributes = [])
关于ValidatesRequests的validate()方法
public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = [])
{
$validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);
if ($validator->fails()) {
$this->throwValidationException($request, $validator);
}
}
getValidationFactory方法
protected function getValidationFactory()
{
// use Illuminate\Contracts\Validation\Factory;
return app(Factory::class);
}
Factory接口提供了4个方法
make方法返回\Illuminate\Contracts\Validation\Validator实例,
extend方法用于扩展自定义的验证规则
interface Factory
{
public function make(array $data, array $rules, array $messages = [], array $customAttributes = []);
public function extend($rule, $extension, $message = null);
public function extendImplicit($rule, $extension, $message = null);
public function replacer($rule, $replacer);
}
Validator接口提供4个方法
fails方法返bool类型,验证是否通过,
failed方法获取验证失败的规则数组,
sometimes方法当callback返回true是进行验证否则忽略验证,
after方法当验证完成时调用callback
public function fails();
public function failed();
public function sometimes($attribute, $rules, callable $callback);
public function after($callback);
综合上述,验证可以可以使用Validator门面,调用静态调用make方法获取Validator实例,通过fails方法判断是否通过验证
示例代码
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
检查请求是够通过验证后,可以使用withErrors方法将错误数据一次性存放到session,使用该方法时,$errors变量重定向后自动在视图间共享,从而允许你轻松将其显示给用户,withErrors方法接收一个验证器、或者一个MessageBag,又或者一个PHP数组。
关于多个表单验证,表单请求验证,错误信息的处理 可官方文档