【发布时间】:2021-04-30 11:44:09
【问题描述】:
使用$request->validate($rules); 时,我无法在特定表单/页面上显示验证错误。这是控制器代码:
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。
有人知道为什么会发生这样的事情吗?
【问题讨论】:
-
查看页面后检查会话是否存在验证错误
-
不,会话中没有任何内容。我只有在使用
Validator::make时才有它们 -
validate() 是 laravel 提供的辅助函数,你可以从中查看
标签: laravel laravel-validation laravel-session