未定义的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 

或者当我想要使用$errorsvariables时使用其他方式。

为什么是这样? 我从来没有遇到过这个问题。

有人能帮助我吗?

你应该确保在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. 

让你的内核看起来像这样