未定义的变量:Laravel

时间:2015-12-24 14:12:40

标签: laravel laravel-5 laravel-validation laravel-middleware laravel-5.2

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

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

有人能帮助我吗?

10 个答案:

答案 0 :(得分:106)

您应该确保app/Http/Kernel.php middlewareGroups web属性中的\Illuminate\View\Middleware\ShareErrorsFromSession::class,

'middleware' => 'web'

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

进行比较

修改

您似乎需要为正在使用的路线添加\Illuminate\View\Middleware\ShareErrorsFromSession::class,或将$middleware放入Route::group(['middleware' => ['web']], function () { //routes here }); 属性数组

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

web

更新LARAVEL申请的更新版本

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

你也可以在这里比较它:

如果您有更新版本(自动应用web中间件),则不应再使用routes.php中的RouteServiceProvider中间件,或者应修改web方法不适用web组中间件。否则,如果routes.php中间件组自动应用于此提供程序,并且您在In [295]: import mpmath as mpm In [296]: mpm.identify(1.414213) Out[296]: 'sqrt(((4-sqrt(0))/2))' In [297]: mpm.identify(3.141592/2) Out[297]: '(2**(157/183)*3**(67/183)*5**(152/183))/(7**(59/61))' In [298]: mpm.identify(3.141592/2,['pi']) Out[298]: 'pi*((4-sqrt(0))/8)' 中也使用它,则可能会得到非常意外的结果。

答案 1 :(得分:19)

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

routes.php文件内部尝试在

中创建路线
Route::group(['middleware' => ['web']], function () {
    //routes here
}

语句。

答案 2 :(得分:3)

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

但是

只有在随后调用php artisan route:cache(清除路由缓存)后才能工作。

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

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

答案 6 :(得分:0)

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

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

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

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

Laravel 5.2 validation errors

答案 7 :(得分: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.

让你的内核看起来像这样

答案 8 :(得分:0)

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

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

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

php artisan key:generate

我在使用5.2。*

时以这种方式解决了

答案 9 :(得分:-2)

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

我使用

删除了laravel 5.6中的警告

error_reporting(E_ALL ^ E_NOTICE);

更多详细信息:http://php.net/manual/en/function.error-reporting.php

希望它将对您有帮助,谢谢