我使用Laravel内置验证器,我想获得第一条错误消息
if ($validator->fails()) {
$error = $validator->messages()->toJson();
.....
}
这是我打印错误时的结果
{"name":["The name must be at least 5 characters."],"alamat":["The address must be at least 5 characters."]}
在上面的例子中,我想得到第一个错误,即"名称必须至少为5个字符。"。我怎么能这样做?
答案 0 :(得分:15)
试试这个:
if ($validator->fails()) {
$error = $validator->errors()->first();
}
答案 1 :(得分:2)
根据2019 Laravel 5.8的操作就这么简单:
// create the validator and make a validation here...
if ($validator->fails()) {
$fieldsWithErrorMessagesArray = $validator->messages()->get('*');
}
您将获得字段名称和错误消息的数组。像这样:
[
'price'=>
[
0 => 'Price must be integer',
1 => 'Price must be greater than 0'
]
'password' => [
[
0 => 'Password is required'
]
]
]
您可以使用Illuminate\Support\MessageBag
类提供的其他验证消息获取器(实际上是上面$validator->messages()
返回的对象类型)。
转到your_laravel_project_dir/vendor/illuminate/support/MessageBag.php
,找到一些有用的方法,例如keys
,has
,hasAny
,first
,all
,{{1} }等,以检查特定的验证错误并自定义HTTP响应消息。
通过查看源代码,很容易理解它们的作用。这是Laravel 5.8 API reference,尽管可能没有源代码有用。
答案 2 :(得分:1)
在您的ajax请求中,当您获得data
时,请尝试data.name
。
这将为您提供name
字段的错误消息。
$.ajax({
url: "/your-save-url",
type: "post",
data: serializedData,
success: function(data) { alert(data.name)}
});
答案 3 :(得分:1)
如果验证失败,可以使用withErrors
方法将错误消息刷新到会话。这是一个数组,此方法将在重定向后自动与所有视图共享$errors
。
return redirect('register')->withErrors($validator, 'login');
可以使用MessageBag
变量中的实例访问$errors
:
{{ $errors->login->first('email') }}
表单API docs
希望这有用。
答案 4 :(得分:0)
如果您使用的是烤面包机样式错误显示,那么它将起作用:
@if(session()->get('errors'))
toastr.error("{{ session()->get('errors')->first() }}");
@endif
答案 5 :(得分:0)
如果要在控制器内执行此操作,则可以:
Arr::first(Arr::flatten($validator->messages()->get('*')))
您将收到第一条短信
The email must be accepted.