Laravel 表单验证,为啥我的视图中没有可用的 $errors 变量?

Posted

技术标签:

【中文标题】Laravel 表单验证,为啥我的视图中没有可用的 $errors 变量?【英文标题】:Laravel form validation, why I don't have the $errors variable available on my view?Laravel 表单验证,为什么我的视图中没有可用的 $errors 变量? 【发布时间】:2016-07-01 11:19:55 【问题描述】:

取自 lrvl 5.1 文档,我读到: 在控制器中使用这些行:

$this->validate($request, [
    'title' => 'required|unique:posts|max:255',
    'author.name' => 'required',
    'author.description' => 'required',
]);

如果验证未通过,控制器将停止执行并重定向回之前的位置。

这是正确的。

然后医生说: "$errors 变量将始终在每个请求的所有视图中可用"

然后建议如下刀片代码:

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

但实际上我会得到一个 ErrorException 未定义的变量错误....

我错过了什么?

谢谢

【问题讨论】:

确保您的代码使用网络中间件。 显示你的控制器并查看源代码。 如果您在没有 Web 中间件的情况下使用 laravel 5.2 可能会发生这种情况,导致在 Web 中间件中引导的会话中的变量存储错误 现在使用网络中间件。像魅力一样工作。谢谢!!! 【参考方案1】:

我会回答自己这个问题, 以防万一还不清楚评论的解决方案。 (感谢 train_fox 的提示)。

只需添加“网络”中间件使用。 在表单操作(get/post)中作为目标的路由中

例子:

Route::group(['middleware' => 'web'],       
       function()
          Route::post('/edit'           , 'My_Controller@edit');
       );

变量 $errors 在要解析的视图中变为可用。

【讨论】:

以上是关于Laravel 表单验证,为啥我的视图中没有可用的 $errors 变量?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的验证器没有在 Laravel 中验证?

为啥如果我不将 csrf_field() 放在表单的末尾(在 Laravel 5 视图中)我会获得 TokenMismatchException?

在我的 laravel 应用程序中,验证错误不会显示在视图中。我怎样才能实现它?

为啥我的 Django 表单没有引发验证错误?

表单请求验证中的 Laravel“独特”自定义消息验证

为啥 Laravel 中的验证不能正常工作?