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

  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Validator;
  6. class PostController extends Controller
  7. {
  8. /**
  9. * 存储一篇博客文章
  10. *
  11. * @param Request $request
  12. * @return Response
  13. */
  14. public function store(Request $request)
  15. {
  16. $validator = Validator::make($request->all(), [
  17. 'title' => 'required|unique:posts|max:255',
  18. 'body' => 'required',
  19. ]);
  20. if ($validator->fails()) {
  21. return redirect('post/create')
  22. ->withErrors($validator)
  23. ->withInput();
  24. }
  25. }
  26. }

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

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