如何在Laravel Validator中只返回每个字段的第一个错误?

kxe2p93d  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(139)

当获取一组字段的简单验证错误时,Laravel返回一个带有“field”/ Array的键/值,其中包含一个字符串,而不是带有错误描述的简单字符串。
下面是验证器的代码:

$validator = Validator::make($request->all(),[
            'email'=>'required|email|unique:user',
            'first_name'=>'required|min:3',
        ]);

        if ($validator->fails())
        {
            $response = ['errors'=>$validator->errors()];
            return $this->r(ResponseFactory::invalid_input_params($response));
        }

这就是我得到的回报:

{
    "code": 400,
    "kind": "invalid_input_params",
    "status": "error",
    "data": {
        "errors": {
            "email": [
                "The email has already been taken."
            ],
            "first_name": [
                "The first name field is required."
            ]
        }
    }
}

这就是我想要的:

{
    "code": 400,
    "kind": "invalid_input_params",
    "status": "error",
    "data": {
        "errors": {
            "email": "The email has already been taken.",
            "first_name": "The first name field is required."
        }
    }
}

我试图向前端应用程序提供来自API端点的错误,对于通常的形式,并且只希望每个字段都有一个错误。
默认情况下,Laravel会为每个字段输出一个数组,即使每个字段只有一个错误-我试图将其转换为字符串并只接受第一个错误。

rsl1atfo

rsl1atfo1#

errors()返回一个MessageBag示例,您可以在该示例上使用keys()方法检索循环中每个键的消息。

<?php

$errors = [];
$messageBag = $validator->errors();

foreach($messageBag->keys() as $fieldKey){
  $errors[ $fieldKey ] = $messageBag->first($fieldKey);
}

$response = ['errors' => $errors];

相关问题