未定义的变量:Laravel 中的错误
Undefined variable: errors in Laravel
当我想在我的 laravel 项目中注册用户时,页面总是显示
Undefined variable: errors (View: /var/www/resources/views/auth/register.blade.php)"
根据 Laravel 文档,$errors
应始终自动设置:
So, it is important to note that an $errors variable will always be available in all of your views on every request, allowing you to conveniently assume the $errors variable is always defined and can be safely used.
当我使用时,我在每个视图上都有这个:
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
或我想使用 $errors
变量时的任何其他方式。
这是为什么?我以前从来没有遇到过这个问题。
有人可以帮我吗?
您应该确保在 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 文件中尝试在以下块中创建您的路线
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
文件并验证其内容。
你也可以在这里比较它:
如果你有更新的版本(自动应用 web
中间件),你不应该再在 routes.php
中使用 web
中间件,或者你应该修改你的 RouteServiceProvider
方法不应用 web
组中间件。否则,如果 web
中间件组自动应用于此提供程序,并且您也在 routes.php
中使用它,您可能会得到非常意外的结果。
count 并不是真正可靠的,因为它假设变量已经存在。将条件检查更改为:@if($errors->has())
或只是 @if($errors)
此外,如果您要重定向,请确保在您的控制器中使用它
return redirect()->back()->with('errors', $validator->messages());
编辑:现在看到您正在使用 L5.2
这可能会回答您的问题 - 您需要将路线放在路线组中。
Laravel 5.2 validation errors
我对 Laravel 5.2.x 也有同样的问题。
在 routes.php
文件中尝试在
中创建你的路线
Route::group(['middleware' => ['web']], function () {
//routes here
}
声明。
我也看到了这个错误,后来意识到我使用了 WithoutMiddleware
特征作为绕过这个特定测试的身份验证的方法,但它最终也删除了验证错误绑定。所以我不得不停止使用该特征来保持视图正常工作。
我遇到了类似的问题,通过将路由也添加到中间件 属性 数组中解决了这个问题,
但是
随后调用php artisan route:cache
(清除路由缓存)才起作用。
我希望你们中的一些人会觉得这有用。
转到 App\Http\Kernel.php 文件。将 $middlewareGroups
属性的所有内容移动到 $middleware
.
查看更多详情-
http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/
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.
让你的内核看起来像这样
另请注意:如果您编写测试并且您的视图 具有 $errors 变量,请确保您不使用 WithoutMiddleware特征。
使用此方法将解决您的问题。
Route::group(['middleware' => ['web']], function () {
//routes should go here
});
如果这对您没有帮助,除了上述代码之外,只需 运行 以下 artisan 命令:
php artisan key:generate
我用5.2的时候就是这样解决的*
当我想在我的 laravel 项目中注册用户时,页面总是显示
Undefined variable: errors (View: /var/www/resources/views/auth/register.blade.php)"
根据 Laravel 文档,$errors
应始终自动设置:
So, it is important to note that an $errors variable will always be available in all of your views on every request, allowing you to conveniently assume the $errors variable is always defined and can be safely used.
当我使用时,我在每个视图上都有这个:
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
或我想使用 $errors
变量时的任何其他方式。
这是为什么?我以前从来没有遇到过这个问题。
有人可以帮我吗?
您应该确保在 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 文件中尝试在以下块中创建您的路线
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
文件并验证其内容。
你也可以在这里比较它:
如果你有更新的版本(自动应用 web
中间件),你不应该再在 routes.php
中使用 web
中间件,或者你应该修改你的 RouteServiceProvider
方法不应用 web
组中间件。否则,如果 web
中间件组自动应用于此提供程序,并且您也在 routes.php
中使用它,您可能会得到非常意外的结果。
count 并不是真正可靠的,因为它假设变量已经存在。将条件检查更改为:@if($errors->has())
或只是 @if($errors)
此外,如果您要重定向,请确保在您的控制器中使用它
return redirect()->back()->with('errors', $validator->messages());
编辑:现在看到您正在使用 L5.2 这可能会回答您的问题 - 您需要将路线放在路线组中。
Laravel 5.2 validation errors
我对 Laravel 5.2.x 也有同样的问题。
在 routes.php
文件中尝试在
Route::group(['middleware' => ['web']], function () {
//routes here
}
声明。
我也看到了这个错误,后来意识到我使用了 WithoutMiddleware
特征作为绕过这个特定测试的身份验证的方法,但它最终也删除了验证错误绑定。所以我不得不停止使用该特征来保持视图正常工作。
我遇到了类似的问题,通过将路由也添加到中间件 属性 数组中解决了这个问题,
但是
随后调用php artisan route:cache
(清除路由缓存)才起作用。
我希望你们中的一些人会觉得这有用。
转到 App\Http\Kernel.php 文件。将 $middlewareGroups
属性的所有内容移动到 $middleware
.
查看更多详情- http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/
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.
让你的内核看起来像这样
另请注意:如果您编写测试并且您的视图 具有 $errors 变量,请确保您不使用 WithoutMiddleware特征。
使用此方法将解决您的问题。
Route::group(['middleware' => ['web']], function () {
//routes should go here
});
如果这对您没有帮助,除了上述代码之外,只需 运行 以下 artisan 命令:
php artisan key:generate
我用5.2的时候就是这样解决的*