在Laravel 5.2中显示验证错误 - $ errors变量为空

时间:2016-04-24 10:37:11

标签: php laravel-5

我在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)。这样我们就不会搞乱框架了。

1 个答案:

答案 0 :(得分:0)

如果您正在运行 Laravel 5.2.27及更高版本,则不需要包含" web"你的路线中的中间件。因为,从上述版本开始,默认情况下已隐式包含它。实际上,重新包含该中间件可能会导致一些奇怪的问题。资料来源:Validation error in Laravel - $errors array does not get populated after the validation failure