我试图在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(IlluminateSupportViewErrorBag)#209 (1) {
["bags":protected]=>
array(0) {
}
}
Web 组通常在内核中定义为.php如下:
protected $middlewareGroups = [
'web' => [
AppHttpMiddlewareEncryptCookies::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::class,
AppHttpMiddlewareVerifyCsrfToken::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数组未填充