当我想在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
变量时的任何其他方式。
这是为什么?我之前从未遇到过这个问题。
有人能帮助我吗?
答案 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 这可能会回答您的问题 - 您需要将路线放在路线组中。
答案 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
希望它将对您有帮助,谢谢