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


Display validation errors in Laravel 5.2 - $errors variable is empty

我试图在Laravel 5.2中返回视图时显示验证错误。$errors变量为空,在类似的问题Laravel 5.2$errors中没有出现在Blade中,建议

(1) 将 ShareErrorsFromSession 中间件移动到 $middleware 属性

(2) 用 Web 中间件包装相关路由。

当然,解决方案 1(有效)不适用于我的情况,因为我有一些 API 路由,正如 Laravel 5.2 验证错误中明确指出的那样。

更具体地说,我正在使用多个身份验证保护驱动程序,并且使用令牌身份验证的路由是无状态的。所以我们剩下的就是解决方案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 组通常在内核中定义为.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 中间件应用于 Laravel 5.2 中的 API 路由中所述还原此更改?如果是,那么也许最好从 Web 组中剥离中间件并将它们放入新组(例如 myweb)中。这样我们就不会弄乱框架。

如果您

运行的是Laravel 5.2.27及更高版本,则无需在路由中包含"web"中间件。因为,从提到的版本开始,默认情况下已经隐式包含它。事实上,重新包含该中间件可能会导致一些奇怪的问题。来源:Laravel中的验证错误 - 验证失败后$errors数组未填充