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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未定义的变量:Laravel中的错误相关的知识,希望对你有一定的参考价值。

当我想在我的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变量时的任何其他方式。

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

有谁可以帮助我吗?

答案

你应该确保在app/Http/Kernel.phpmiddlewareGroups web中你有IlluminateViewMiddlewareShareErrorsFromSession::class,

https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php

在这个数组中。与'middleware' => 'web'比较

编辑

看来你需要为你正在使用的路线添加IlluminateViewMiddlewareShareErrorsFromSession::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中也使用它,则可能会得到非常意外的结果。

另一答案

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

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

error_reporting(E_ALL ^ E_NOTICE);

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

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

另一答案

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

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

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

声明。

另一答案

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

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

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

另一答案

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

另一答案

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

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

另一答案

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

另一答案

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

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

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

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

Laravel 5.2 validation errors

另一答案
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来解决这个问题。*

以上是关于未定义的变量:Laravel中的错误的主要内容,如果未能解决你的问题,请参考以下文章

laravel 刀片模板中的覆盖部分抛出未定义的变量错误

视图页面laravel中的未定义变量[关闭]

Laravel 7 组件中的未定义变量

未定义变量:Laravel 5.3 中的 _ENV

未定义变量:Blade Laravel 7.x中的横幅

选择框 laravel 未定义的变量