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



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

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

或者当我想要使用CCD_ 2变量时的任何其他方式。

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

有人能帮帮我吗?

您应该确保在webmiddlewareGroups属性中的app/Http/Kernel.php中有:

IlluminateViewMiddlewareShareErrorsFromSession::class,

在这个数组中。将此与https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php

编辑

似乎您需要为正在使用的路由添加'middleware' => 'web',或者将IlluminateViewMiddlewareShareErrorsFromSession::class,放入$middleware属性数组

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

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

更新LARAVEL应用程序

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

你也可以在这里进行比较:

  • Laravel应用程序的RouteServiceProvider 5.2.24

  • Laravel应用程序的RouteServiceProvider 5.2.27

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

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

routes.php文件中,尝试在中创建路线

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

声明。

还要注意:如果您编写测试,并且您的视图具有$errors变量,请确保您没有使用WithoutMiddleware特性。

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

但是

它是在随后调用CCD_ 20(清除路由缓存)之后才工作的。

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

我也看到了这个错误,后来意识到我使用了$errors1特性来绕过这个特定测试的身份验证,但它最终也删除了验证错误绑定。所以我不得不停止使用这种特性来保持观点的有效性。

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

查看更多详细信息-http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/

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

此外,如果你正在重定向,请确保在你的控制器中使用这个

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

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

Laravel 5.2验证错误

protected $middleware = [              IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
    SocialHttpMiddlewareEncryptCookies::class,
        IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
        IlluminateSessionMiddlewareStartSession::class,
        IlluminateViewMiddlewareShareErrorsFromSession::class,
        SocialHttpMiddlewareVerifyCsrfToken::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.

使您的内核看起来像这个

您的问题将通过使用此方法得到解决。

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

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

php artisan key:generate

我在使用5.2.*

时用这种方法解决了问题

最新更新