未定义的variables:Laravel中的错误
当我想在我的laravel项目中注册一个用户时,页面总是这样说
未定义variables:错误(查看:/var/www/resources/views/auth/register.blade.php)“
根据Laravel文档,应该总是自动设置$errors
:
所以,需要注意的是$ errorsvariables总是在每个请求的所有视图中都可用,这使您可以方便地假设$ errorsvariables总是被定义的并且可以被安全地使用。
我在使用时对每个视图都有这样的看法:
@if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
或者当我想要使用$errors
variables时使用其他方式。
为什么是这样? 我从来没有遇到过这个问题。
有人能帮助我吗?
你应该确保在app/Http/Kernel.php
中的middlewareGroups
属性为web
你有:
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
在这个数组中。 把这个和https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php比较一下;
编辑
看来你需要为你正在使用的路由添加'middleware' => 'web'
,或者把\Illuminate\View\Middleware\ShareErrorsFromSession::class,
到$middleware
属性数组中
要么
在routes.php文件里面尝试在下面的块中创build你的路由
Route::group(['middleware' => ['web']], function () { //routes here });
更新更新的LARAVEL应用程序版本
请注意,如果您使用web
中间件两次,您也可能遇到问题。 Laravel应用程序5.2.27发生了变化(不要将它与当前使用的Laravel框架混淆 – 例如,您可能使用Laravel框架为例5.2.31,但在5.2.24版中使用Laravel应用程序),其中web
中间件是所有路线自动应用。 所以如果遇到问题,你应该打开你的app/Providers/RouteServiceProvider.php
文件并validation它的内容。
你可以在这里比较一下:
-
用于Laravel应用程序的RouteServiceProvider 5.2.24
-
用于Laravel应用程序的RouteServiceProvider 5.2.27
如果您有更新的版本(自动应用web
中间件),则不应再使用RouteServiceProvider
web
中间件,否则应修改RouteServiceProvider
方法以不应用web
组中间件。 否则,如果web
中间件组被自动应用在这个提供程序中,并且在routes.php
使用它,则可能会得到非常意外的结果。
我和Laravel 5.2.x有同样的问题。
在routes.php
文件里面,尝试在你的内部创build你的路由
Route::group(['middleware' => ['web']], function () { //routes here }
声明。
我有类似的问题,并通过添加路由到中间件属性数组中解决了这个问题,
但
它只有在调用php artisan route:cache
之后才工作php artisan route:cache
随后php artisan route:cache
(清除路由caching)。
我希望你们中的一些人会觉得这很有用。
转到App \ Http \ Kernel.php文件。 将$middlewareGroups
属性的所有内容移动到$middleware
。
检查更多细节 – http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/
我也看到这个错误,后来意识到我已经使用WithoutMiddleware
特性作为绕过这个特定testing的authentication的手段,但它最终也消除了validation错误绑定。 所以我不得不停止使用这个特性来保持视图的正常工作。
另外要注意的是:如果你编写testing,并且你的视图有 $ errorsvariables,确保你不使用WithoutMiddleware特性。
计数不是真正可行的,因为它假定variables已经存在。 将条件检查更改为: @if($errors->has())
或者只是@if($errors)
另外,如果您正在redirect,请确保在您的控制器中使用它
return redirect()->back()->with('errors', $validator->messages());
编辑:现在看到你正在使用L5.2这可能会回答你的问题 – 你需要把你的路线在路线组。
Laravel 5.2validation错误
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Social\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \Social\Http\Middleware\VerifyCsrfToken::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.
让你的内核看起来像这样