我在Laravel 5.2中回到View时试图显示验证错误。 $ errors变量为空,在类似问题Laravel 5.2 $errors not appearing in Blade中,建议:
(1)将ShareErrorsFromSession中间件移至$ middleware属性
或
(2)用web中间件包装相关路由。
当然,解决方案1(有效)在我的情况下不适用,因为我有一些API路由,因为它在Laravel 5.2 validation errors中有详细说明。
更具体地说,我使用多个身份验证保护驱动程序,使用令牌身份验证的路由是无状态的。所以我们留下的是解决方案2.它应该工作,但它不起作用(或者我错过了一些东西)。 无论我是否将我的路线(我想要显示验证错误的路线)放在组内:
Route::group(['middleware' => ['web','auth:web']], function () {
...
}
或仅在里面:
Route::group(['middleware' => 'web'], function () {
...
}
$ errors变量似乎为空。转储变量给出:
object(Illuminate\Support\ViewErrorBag)#209 (1) {
["bags":protected]=>
array(0) {
}
}
Web组通常在kernel.php中定义为:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
我的控制器如下:
$form = Input::all();
$rules = Config::get('validation.contact');
$validation = Validator::make($form,$rules);
if ($validation->fails()){
return Redirect::back()->withErrors($validation);
} else {
...
}
有什么想法吗?
更新(回答后):
你是对的亚历山大!我错过了最近的变化。但是那些不需要调用这些中间件的API路由呢?我们应该按照Web middleware being applied to API routes in Laravel 5.2中的描述恢复此更改吗?如果是,那么最好从Web组中剥离中间件并将它们放在一个新组中(例如myweb)。这样我们就不会搞乱框架了。
答案 0 :(得分:0)
如果您正在运行 Laravel 5.2.27及更高版本,则不需要包含" web"你的路线中的中间件。因为,从上述版本开始,默认情况下已隐式包含它。实际上,重新包含该中间件可能会导致一些奇怪的问题。资料来源:Validation error in Laravel - $errors array does not get populated after the validation failure