未定义的变量: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.phpmiddlewareGroups 属性 对于 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的时候就是这样解决的*