Laravel 5.2 未显示表单验证错误 [重复]
Posted
技术标签:
【中文标题】Laravel 5.2 未显示表单验证错误 [重复]【英文标题】:Laravel 5.2 not showing form validation errors [duplicate] 【发布时间】:2016-05-25 01:28:45 【问题描述】:这很奇怪。我整天都在谷歌搜索,试图为我的问题找到解决方案,但由于版本不同或请求不同 - 控制器处理,大多数解决方案都不适合我。
这是怎么回事。
我有一个表格:
<div class="form-group">
Name *
!! Form::text('name', '', ['class'=>'form-control', 'placeholder'=>'Required field']) !!
</div>
还有一个请求:
class ContactFormRequest extends Request
public function authorize()
return true;
public function rules()
return [
'name' => 'required|max:64',
'email' => 'required|email|max:128',
'message' => 'required|max:1024',
];
我将名称字段留空,因此验证失败,它应该返回联系表单页面并显示错误:
@if(count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li> $error </li>
@endforeach
</ul>
</div>
@endif
它什么也没显示!如果我 vardump
$errors
变量,我得到这个:
object(Illuminate\Support\ViewErrorBag)[161]
protected 'bags' =>
array (size=0)
empty
如果我正确填写表单字段,它会成功将我发送到成功页面,并且一切正常。我现在只需要让这个错误的东西正常工作:S
提前谢谢你!
【问题讨论】:
您的控制器是否绑定到 web 中间件组的路由部分?如果没有,请尝试绑定它们,但我看不出你的代码有什么问题...... 我假设您的控制器的方法在参数列表中包含 ContactFormRequest?您是自己重定向回表单还是依赖验证器的默认操作? 是的。我所有的路线都与中间件“网络”分组。我的控制器方法在它的参数中有 ContactFormRequest 作为类型!var_dump($errors->all());
说什么?
array (size=0) empty - 太奇怪了,我将必填字段留空,它重定向回来,但没有显示错误! :S
【参考方案1】:
这是 5.2 升级的一个重大问题。正在发生的事情是负责使所有视图都可以使用该错误变量的中间件没有被使用,因为它已从全局中间件移至 Web 中间件组。
有两种方法可以解决这个问题:
1-在您的 kernel.php 文件中,您可以将中间件 \Illuminate\View\Middleware\ShareErrorsFromSession::class
移回 protected
$middleware
属性。
2-您可以使用路由组包装所有网络路由并将网络中间件应用到它们。
Route::group(['middleware' => 'web'], function()
// Place all your web routes here...
);
看这个laravel-5-2-errors-not-appearing-in-blade
【讨论】:
谢谢先生的回答。我在那篇文章中看到了这个答案,但是我所有的路由都在 WEB 中间件组内!还是不行。 您的网络中间件为空且未显示错误???? 好的,我发现了问题。这实际上是非常愚蠢的。 POST 路由在 web 中间件组之外 在最新的 laravel 5.2.41 版本中,中间件 web 被抛弃了。 @paranoid OMG!!我爱你,过去 6 小时我一直在寻找答案。谢谢大佬以上是关于Laravel 5.2 未显示表单验证错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试为 user 和 admin 实现 laravel 5.2 多重身份验证。但是未定义身份验证用户提供程序 [] 错误给出
Laravel 5.2 & AJAX - 重定向后显示成功消息
如何使用 vuejs 在 laravel 刀片中显示验证错误