未定义的变量:Laravel中的错误

问题描述 投票:61回答:10

当我想在我的laravel项目中注册用户时,页面总是说

未定义的变量:错误(查看:/var/www/resources/views/auth/register.blade.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

或者当我想使用$errors变量时的任何其他方式。

为什么是这样?我之前从未遇到过这个问题。

有谁可以帮助我吗?

laravel laravel-5 laravel-validation laravel-middleware laravel-5.2
10个回答
107
投票

你应该确保在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添加到Route::group(['middleware' => ['web']], function () { //routes here }); 属性数组中

or

在routes.php文件中尝试在以下块中创建路由

web

更新版LARAVEL应用程序的更新

请注意,如果您使用web中间件两次,您可能会遇到问题。 Laravel应用程序5.2.27发生了变化(不要将它与您目前使用的Laravel框架混淆 - 您可以使用Laravel框架,例如5.2.31,但在5.2.24版中使用Laravel应用程序),其中app/Providers/RouteServiceProvider.php中间件是自动应用于所有路线。因此,如果出现问题,您应该打开RouteServiceProvider for Laravel application 5.2.24文件并验证其内容。

你也可以在这里比较它:

如果您有更新的版本(自动应用web中间件),您不应再使用routes.php中的RouteServiceProvider中间件,或者您应该修改您的web方法以不应用web组中间件。否则,如果routes.php中间件组自动应用于此提供程序,并且您在routes.php中也使用它,则可能会得到非常意外的结果。


-2
投票

它实际上并不是错误,它警告你可以使用php error_reporting()函数删除

我通过使用删除了我的laravel 5.6中的警告

error_reporting(E_ALL ^ E_NOTICE);

更多细节:http://php.net/manual/en/function.error-reporting.php

希望它会对你有所帮助,谢谢


19
投票

我在Laravel 5.2.x中遇到了同样的问题。

在qazxsw poi文件里面尝试创建你的路线

Route::group(['middleware' => ['web']], function () {
    //routes here
}

声明。


3
投票

我有类似的问题,并通过添加路由到中间件属性数组解决了这个问题,

它只是在随后调用php artisan route:cache(清除路由缓存)后才起作用。

我希望你们中的一些人会觉得这很有用。


2
投票

我也看到了这个错误,后来意识到我已经使用WithoutMiddleware特性作为绕过这个特定测试的身份验证的手段,但它最终也删除了验证错误绑定。所以我不得不停止使用特征来保持视图正常工作。


2
投票

转到App \ Http \ Kernel.php文件。将$middlewareGroups属性的所有内容移至$middleware

检查更多细节 - http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/


2
投票

另外要注意:如果你编写测试并且你的视图有$ errors变量,请确保你不使用WithoutMiddleware特性。


0
投票

count不是真的可行,因为它假定变量已经存在。将条件检查更改为:@if($errors->has())或只是@if($errors)

此外,如果您要重定向,请确保在您的控制器中使用它

return redirect()->back()->with('errors', $validator->messages());

编辑:现在看到你正在使用L5.2这可能会回答你的问题 - 你需要把你的路线放在路线组。

Laravel 5.2 validation errors


0
投票
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.

让你的内核看起来像这样


0
投票

使用此方法可以解决您的问题。

Route::group(['middleware' => ['web']], function () {
        //routes should go here
});

如果这对您没有帮助,除了上面的代码之外,只需运行以下artisan命令:

php artisan key:generate

我用5.2来解决这个问题。*

© www.soinside.com 2019 - 2024. All rights reserved.