将laravel错误消息更改为API的JSON

问题描述 投票:2回答:2

有没有办法操纵或更改laravel默认错误消息到JSON响应。我正在构建一个API。我得到的当前回应是

{
    "email": [
        "The email has already been taken."
    ],
    "phone": [
        "The phone has already been taken."
    ]
}

我希望它是这样的

{
  "errors": [
    {
      "field": "username",
      "message": "The username field is required."
    },
    {
      "field": "password",
      "message": "The password field is required."
    }
  ]
}




$validator = Validator::make($request->all(), [
            'email' => 'required|string|email|max:50|unique:customers',
            'phone' => 'required|string|max:10|min:10|unique:customers',
            'password' => 'required|string|min:6',
        ]);



        if ($validator->fails()) {
           return response()->json($validator->messages(), 200);
        }
php json laravel api
2个回答
2
投票

从messageBag中提取错误并根据需要格式化它们:

$errors = [];
foreach($validator->getMessageBag()->toArray() as $key=>$messages) {
    $errors[$key] = $messages[0];
}
return response()->json($errors, 200);

0
投票

如果您在第一个示例中获得了对象,则可以通过for..in循环更改它

var response = {
    "email": [
        "The email has already been taken."
    ],
    "phone": [
        "The phone has already been taken."
    ]
};

var allError = [];
for(let i in response){
   allError.push({
      field: i,
      message: response[i][0]
    });
}
var errors = {errors:allError};
console.log(errors);

你不应该从php / laravel改变,因为那时你将无法为单个输入显示多个错误。

也永远不会更改也适用于网络的基本代码。你不能只考虑API,它也可以用于网络。

© www.soinside.com 2019 - 2024. All rights reserved.