Laravel 创建validator

手动创建 验证器 Validator

如果我们不想在Request上使用validate方法,那么我们可以使用Validator Facade中的make方法手动创建一个验证器实例:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class PostController extends Controller
{
    /**
     * Store a new blog post.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('post/create')
                        ->withErrors($validator)
                        ->withInput();
        }

        // Store the blog post...
    }
}

make方法的第一个参数是需要验证的请求数据,第二个参数是用于验证的验证规则。

如果验证失败,可以使用withErrors方法将错误消息保存到session会话中。使用此方法时,$errors变量将在重定向后自动绑定到视图中,从而使我们可以很容易地将其显示在页面上。withErrors方法的参数可以是验证器,一个MessageBag或PHP 数组。

自动重定向

如果我们想手动创建一个验证器实例,但仍然利用请求validate方法提供的自动重定向功能,则可以在验证器实例上调用validate方法。如果验证失败,则将自动重定向用户,或者在AJAX请求的情况下,将返回JSON响应:

Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
])->validate();

如果验证失败,则可以使用validateWithBag方法将错误消息存储在命名错误包中:

Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
])->validateWithBag('post');

命名错误包

如果我们在一个页面上有多个表单,则不妨为MessageBag错误命名,从而使我们可以检索特定表单的错误消息。可以使用withErrors来实现,它的第二个参数则是用来指定该请求表单的错误信息的名称:

return redirect('register')
            ->withErrors($validator, 'login');

然后,我们可以从$errors 变量中访问为MessageBag命名的实例:

{{ $errors->login->first('email') }}

验证完成后调用的方法

验证程序还允许我们在验证完成后调用回调函数。这使我们可以轻松地执行进一步的验证,甚至可以将更多错误消息添加到消息集合中。可以用Validator 实例上的after方法实现:

$validator = Validator::make(...);

$validator->after(function ($validator) {
    if ($this->somethingElseIsInvalid()) {
        $validator->errors()->add('field', 'Something is wrong with this field!');
    }
});

if ($validator->fails()) {
    //
}

查看笔记

扫码一下
查看教程更方便