php 从Laravel确认中获得错误消息

dfddblmv  于 2022-12-21  发布在  PHP
关注(0)|答案(7)|浏览(244)

我使用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个字符"。我该如何做到这一点?

jtoj6r0c

jtoj6r0c1#

试试这个:

if ($validator->fails()) {
   $error = $validator->errors()->first();
}
vxbzzdmp

vxbzzdmp2#

根据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类提供的其他验证消息getter(它实际上是上面$validator->messages()返回的对象类型)。

消息包错误消息其他帮助程序

转到your_laravel_project_dir/vendor/illuminate/support/MessageBag.php并找到一些有用的方法,如keyshashasAnyfirstallisEmpty等,您在检查特定验证错误和定制HTTP响应消息时可能需要这些方法。
通过查看源代码很容易理解它们的作用。下面是Laravel 5.8 API reference,虽然可能没有源代码有用。

nkcskrwz

nkcskrwz3#

在 AJAX 请求中,当您获得data时,尝试data.name
这将给予name字段的错误消息。

$.ajax({
        url: "/your-save-url",
        type: "post",
        data: serializedData,
        success: function(data) { alert(data.name)}
    });
cu6pst1q

cu6pst1q4#

如果验证失败,可以使用withErrors方法将错误消息刷新到会话。这是一个数组,此方法将在重定向后自动与所有视图共享$errors

return redirect('register')->withErrors($validator, 'login');

可以使用$errors变量中的示例访问MessageBag

{{ $errors->login->first('email') }}

表单API文档
希望这是有帮助的。

wribegjk

wribegjk5#

如果你使用toastr风格的错误显示,这将工作:

@if(session()->get('errors'))
    toastr.error("{{ session()->get('errors')->first() }}");
@endif
vfh0ocws

vfh0ocws6#

如果你想在控制器内部进行,你可以:

Arr::first(Arr::flatten($validator->messages()->get('*')))

你会收到第一条短信

The email must be accepted.
fsi0uk1n

fsi0uk1n7#

要获取所有错误,请尝试以下操作:

if ($validator->fails()) {
   $error = $validator->errors()->all();
}

相关问题