3

我正在使用 Laravel 构建一个 REST API,并想知道是否有一种方法可以在验证时自定义 API 响应。

例如,我在 Laravel 请求中有一个验证规则,说需要一个特定的字段。

public function rules() {
   return [
       'title'=>'required|min:4|max:100',
   ];
}

因此,对于此验证,我在 Postman 中收到这样的错误消息

{
    "title": [
        "Please enter Ad Title"
    ]
}

我想要的是像这样自定义响应..

{
    "success": false,
    "message": "Validation Error"
    "title": [
        "Please enter Ad Title"
    ]
}

因此,错误更加具体和清晰。

那么,如何实现呢?

谢谢!

4

3 回答 3

2

FormRequest为调用的类提供一个自定义函数,并返回一个验证消息数组,该数组使用特定规则上的特定messages消息映射:dot notation

public function messages()
{
    return [
        'title.required' => 'Please enter an Ad title',
        'title.min' => 'Your title must be at least 4 character'
    ]
}

返回一条success消息是徒劳的,就好像它失败了,无论如何422在执行请求时都会抛出错误代码。ajax

至于message属性,您将收到它作为有效负载的一部分,其中实际的验证错误将包含在对象中。

于 2018-01-08T19:06:21.813 回答
2

您可以自定义错误,查看文档。您也可以通过这种方式进行验证

$validator = Validator::make($request->all(), [
        'title'=>'required|min:4|max:100'
    ]);

    if ($validator->fails()) {
        // get first error message
        $error = $validator->errors()->first();
        // get all errors 
        $errors = $validator->errors()->all();
    }

然后将它们添加到您的回复中,例如

 return response()->json([
     "success" => false,
     "message" => "Validation Error"
     "title" => $error // or $errors
 ]);
于 2018-01-08T19:15:08.033 回答
1

我为您的 REST-API 验证 Laravel FormRequest 验证响应找到了一个解决方案,只需编写几行代码即可更改。在这里输入代码

请将此两行添加到您的App\Http\Requests\PostRequest.php

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

之后在您的文件中添加此功能。

您可以将 $response 变量更改为您的特定方式。

protected function failedValidation(Validator $validator) { 
        $response = [
            'status' => false,
            'message' => $validator->errors()->first(),
            'data' => $validator->errors()
        ];
        throw new HttpResponseException(response()->json($response, 200)); 
    }
于 2020-09-13T08:42:16.263 回答