控制器验证

我们将使用 Illuminate\Http\Request 类提供的 validate 方法。如果验证通过,你的代码会继续正常运行。如果验证失败,则会抛出异常,并自动将对应的错误响应返回给用户。 在传统 HTTP 请求下,会生成一个重定向响应, 而对于 AJAX 请求则会发送 JSON 响应。

  1. /**
  2. * 存储一篇新的博客文章
  3. *
  4. * @param Request $request
  5. * @return Response
  6. */
  7. public function store(Request $request)
  8. {
  9. $validatedData = $request->validate([
  10. 'title' => 'required|unique:posts|max:255',
  11. 'body' => 'required',
  12. ]);
  13. // 博客文章验证通过...
  14. }

验证失败会302重定向到之前的页面1.png

显示验证错误信息

那么,如果传入的请求参数未通过给定的验证规则呢?正如前面所提到的,Laravel 会自动将用户重定向到之前的位置。另外,所有的验证错误信息会自动存储到 闪存 session 中。

所以,在如下的例子中,当表单验证失败时,用户将被重定向到控制器的 create 方法中,我们可在视图中显示错误信息:

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

技巧:$errors 由 web 中间件组提供的 Illuminate\View\Middleware\ShareErrorsFromSession 中间件绑定到视图中。当该中间件被应用后,$errors 变量在您的视图中总是可用的,因此您可以假设 $errors 变量总是被定义了且总是安全可用的。