菜单
本页目录

验证器类验证

如果您不想再请求中使用 validate 方法,您可以使用 Validator 门面 手动创建一个验证器实例。门面中的 make 方法将会生成一个新的验证器实例:

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class PostController extends Controller
{
    /**
     * 存储一篇博客文章
     *
     * @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();
        }
    }
}

方法中的第一个参数是期望校验的数据。第二个参数是应用到数据上的校验规则

如果校验失败,您可以使用 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') }}