我正在尝试显示表单错误以防表单验证失败。一切正常,表单已正确验证,但不会在视图中显示表单错误。每次返回一个空数组作为错误。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class HomeController extends Controller
{
public function storeProjectDetails(Request $request)
{
$messages = [
'title.required' => 'Please enter trip title',
'title.max' => 'Only 254 characters are allowed as trip title',
'startDate.required' => 'Please enter trip start date',
'startDate.date' => 'Only date formats are allowed as start date',
'endDate.required' => 'Please enter trip end date',
'endDate.date' => 'Only date formats are allowed as end date',
];
$this->validate($request,[
'title' => 'required|string|max:254',
'startDate' => 'required|date',
'endDate' => 'required|date',
]);
}
}
景色:
print_r($errors->all());
用过这个
@if($errors->has())
@foreach ($errors->all() as $error)
<div>{{ $error }}</div>
@endforeach
@endif
首先您需要使用
if
条件检查错误然后您需要使用下面给出的循环打印错误
@if ($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
在您的情况下,您缺少在控制器中返回错误数组。尝试下面给出的验证检查。
$this->validate($request,[
'title' => 'required|string|max:254',
'startDate' => 'required|date',
'endDate' => 'required|date',
], $messages);
您正在以错误的格式构建消息数组,它应该如下所示:
$messages = [
'required' => 'Please enter :attribute',
'date' => 'Only date formats are allowed as :attribute',
...
];
好吧,对于有同样问题的其他人,让我分享我最初在这里分享的解决方案:https://github.com/laravel/framework/issues/27729#issuecomment-1442976348
有很多类似的相关问题变得非常棘手。
我认为这是分享我发现的正确主题。
例如,我在几个月前从 Laravel 5.2 更新到 5.5 的遗留系统中工作,所以请记住,您的问题可能有所不同。
最初我认为这可能是由于中间件的设置所致,更多信息请参见以下链接:
几个小时后没有成功或任何真正有用的东西,我决定用 Laravel 5.2 挖掘旧代码。
好吧,他们改变了
ValidatesRequests
特质的行为。不仅如此,主要是功能validate
:
// 5.5
public function validate(Request $request, array $rules,
array $messages = [], array $customAttributes = [])
{
$this->getValidationFactory()
->make($request->all(), $rules, $messages, $customAttributes)
->validate();
return $this->extractInputFromRules($request, $rules);
}
// 5.2 - I didn't look carefully, but it seems that wasn't changed until 5.4
public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = [])
{
$validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);
if ($validator->fails()) {
$this->throwValidationException($request, $validator);
}
}
弄清楚之后,我回到文档并没有找到与此相关的任何内容。
无论如何,似乎在
5.5
之后如果你想将错误和输入发送到视图,而不是只做return back();
,你需要使用像return back()->withInput()->withErrors($exception->validator ?? '');
这样的东西。
或者,您可以使用
5.2
中的旧代码创建自定义特征(也许将两者结合起来)并覆盖 ValidatesRequests
到 CustomValidatesRequests
的使用。
从
5.2
恢复特征后,错误消息返回到系统。 :笑脸:
尽管如此,请记住这可能会导致其他问题,如果可能的话最好使用
->withInput()->withErrors($exception->validator ?? '');
.