自定义Laravel API验证响应

时间:2018-01-08 18:27:31

标签: php laravel validation laravel-request

我正在使用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"
    ]
}

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

那么,如何实现这个目标?

谢谢!

3 个答案:

答案 0 :(得分:2)

为名为FormRequest的{​​{1}}类提供自定义函数,并返回使用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属性,您将收到该属性作为有效负载的一部分,其中实际验证错误将包含在对象中。

答案 1 :(得分:1)

您可以自定义错误,请查看documentation。你也可以用这种方式验证

$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
 ]);

答案 2 :(得分: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)); 
    }