当我想在我的laravel项目中注册用户时,页面总是显示
未定义的变量:错误(View:/var/www/resources/views/auth/registerblade.php)"
根据Laravel文档,$errors
应始终自动设置:
因此,需要注意的是,$errors变量将始终在您的每个请求的所有视图中可用,这使您可以方便地假设$errors始终是定义的,并且可以安全地使用。
当我使用时,我在每个视图上都有这个:
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
或者当我想要使用CCD_ 2变量时的任何其他方式。
为什么会这样?我以前从未遇到过这个问题。
有人能帮帮我吗?
您应该确保在web
的middlewareGroups
属性中的app/Http/Kernel.php
中有:
IlluminateViewMiddlewareShareErrorsFromSession::class,
在这个数组中。将此与https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php
编辑
似乎您需要为正在使用的路由添加'middleware' => 'web'
,或者将IlluminateViewMiddlewareShareErrorsFromSession::class,
放入$middleware
属性数组
或
在routes.php文件内部,尝试在以下块中创建路由
Route::group(['middleware' => ['web']], function () {
//routes here
});
更新LARAVEL应用程序
请注意,如果您两次使用web
中间件,也可能会遇到问题。Laravel应用程序发生了变化5.2.27(不要将其与您目前使用的Laravel框架混淆——例如5.2.31,您可能使用Laravel架构,但在5.2.24版本中有Laraver应用程序),其中web
中间件自动应用于所有路由。因此,如果出现问题,您应该打开app/Providers/RouteServiceProvider.php
文件并验证其内容。
你也可以在这里进行比较:
Laravel应用程序的RouteServiceProvider 5.2.24
Laravel应用程序的RouteServiceProvider 5.2.27
如果您有更新的版本(自动应用web
中间件),则不应再在routes.php
中使用web
中间件,或者应修改RouteServiceProvider
方法以不应用web
组中间件。否则,如果web
中间件组在该提供程序中自动应用,并且您也在routes.php
中使用它,您可能会得到非常意外的结果。
我在Laravel 5.2.x上遇到了同样的问题。
在routes.php
文件中,尝试在中创建路线
Route::group(['middleware' => ['web']], function () {
//routes here
}
声明。
还要注意:如果您编写测试,并且您的视图具有$errors变量,请确保您没有使用WithoutMiddleware特性。
我也遇到过类似的问题,并通过在中间件属性数组中添加路由来解决这个问题,
但是
它是在随后调用CCD_ 20(清除路由缓存)之后才工作的。
我希望你们中的一些人会觉得这很有用。
我也看到了这个错误,后来意识到我使用了$errors
1特性来绕过这个特定测试的身份验证,但它最终也删除了验证错误绑定。所以我不得不停止使用这种特性来保持观点的有效性。
转到App\Http\Kernel.php文件。将$middlewareGroups
属性的所有内容移动到$middleware
。
查看更多详细信息-http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/
count并不是真正可实现的,因为它假定变量已经存在。将条件检查更改为:@if($errors->has())
或仅@if($errors)
此外,如果你正在重定向,请确保在你的控制器中使用这个
return redirect()->back()->with('errors', $validator->messages());
编辑:现在看到您正在使用L5.2这可能会回答你的问题——你需要把你的路线放在路线组中。
Laravel 5.2验证错误
protected $middleware = [ IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
SocialHttpMiddlewareEncryptCookies::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::class,
SocialHttpMiddlewareVerifyCsrfToken::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
],
'api' => [
'throttle:60,1',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
使您的内核看起来像这个
您的问题将通过使用此方法得到解决。
Route::group(['middleware' => ['web']], function () {
//routes should go here
});
如果这对你没有帮助,除了上面的代码外,只需运行以下artisan命令:
php artisan key:generate
我在使用5.2.*