在 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 中所述。
更具体地说,我使用了多个身份验证防护驱动程序,并且使用 token 身份验证的路由是无状态的。所以我们剩下的是解决方案 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',
],
];
我的 Controller 看起来像:
$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)。这样我们就不会弄乱框架。
最佳答案
如果您正在运行 Laravel 5.2.27 和更高版本 ,则不需要在路由中包含“web”中间件。因为,从提到的版本开始,它默认已经被隐式包含了。事实上,重新包含该中间件可能会导致一些奇怪的问题。资料来源:Validation error in Laravel - $errors array does not get populated after the validation failure
关于php - 在 Laravel 5.2 中显示验证错误 - $errors 变量为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36822010/