Laravel 使用 $request->validate 时不显示验证错误
Laravel does not display validation errors when using $request->validate
使用 $request->validate($rules);
时,我无法在特定 form/page 上显示验证错误。这是控制器代码:
public function store(Request $request) {
$rules = [
'dummy-field' => 'required|string',
];
$params = $request->validate($rules);
// $this->validate($request, $rules); // Same result with this
dd($params);
}
在我看来:
@if($errors->any())
<div class="alert alert-danger">
@foreach($errors->all() as $error)
<div>{{ $error }}</div>
@endforeach
</div>
@endif
当我提交表单时(没有 dummy-field
)我被正确地重定向回 到上一页(如果我的表单通过验证我应该看到dd
输出),但 不显示错误消息 。我也试过 dd($errors)
并且 ErrorBag 实际上是空的。
奇怪的是,使用手动验证器可以正确显示错误消息。将控制器重构为:
$rules = [
'dummy-field' => 'required|string',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator);
}
dd($validator);
我看到了错误消息。
我真的无法理解这种行为。我在我的应用程序中将 $request->validate()
用于其他表单,我没有遇到任何问题。
我正在使用 laravel 8。
有人知道为什么会发生这样的事情吗?
我终于找到了解决办法。将其张贴在这里以防对某人有所帮助。
问题出在cookie
会话驱动
浏览器有 cookie 的最大大小(我认为大约 4k,但可能会有所不同)。使用 $request->validate()
时,重定向会将错误和输入都放入会话中。如果输入足够长(在我的例子中,我有一些包含 ~300 个字符文本的文本区域),cookie 将超过最大大小并且浏览器将忽略它,因此 Laravel 将无法从中检索错误会话。
我无法使用 file
驱动程序,因为我的应用程序分布在负载均衡器之外的多个服务器上,所以我使用 redis
驱动程序解决了所有问题。
使用 $request->validate($rules);
时,我无法在特定 form/page 上显示验证错误。这是控制器代码:
public function store(Request $request) {
$rules = [
'dummy-field' => 'required|string',
];
$params = $request->validate($rules);
// $this->validate($request, $rules); // Same result with this
dd($params);
}
在我看来:
@if($errors->any())
<div class="alert alert-danger">
@foreach($errors->all() as $error)
<div>{{ $error }}</div>
@endforeach
</div>
@endif
当我提交表单时(没有 dummy-field
)我被正确地重定向回 到上一页(如果我的表单通过验证我应该看到dd
输出),但 不显示错误消息 。我也试过 dd($errors)
并且 ErrorBag 实际上是空的。
奇怪的是,使用手动验证器可以正确显示错误消息。将控制器重构为:
$rules = [
'dummy-field' => 'required|string',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator);
}
dd($validator);
我看到了错误消息。
我真的无法理解这种行为。我在我的应用程序中将 $request->validate()
用于其他表单,我没有遇到任何问题。
我正在使用 laravel 8。
有人知道为什么会发生这样的事情吗?
我终于找到了解决办法。将其张贴在这里以防对某人有所帮助。
问题出在cookie
会话驱动
浏览器有 cookie 的最大大小(我认为大约 4k,但可能会有所不同)。使用 $request->validate()
时,重定向会将错误和输入都放入会话中。如果输入足够长(在我的例子中,我有一些包含 ~300 个字符文本的文本区域),cookie 将超过最大大小并且浏览器将忽略它,因此 Laravel 将无法从中检索错误会话。
我无法使用 file
驱动程序,因为我的应用程序分布在负载均衡器之外的多个服务器上,所以我使用 redis
驱动程序解决了所有问题。