从Laravel验证中获取错误消息

时间:2016-02-15 23:36:35

标签: php json laravel

我使用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个字符。"。我怎么能这样做?

6 个答案:

答案 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,找到一些有用的方法,例如keyshashasAnyfirstall,{{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.