Php 自定义Laravel API验证响应

Php 自定义Laravel API验证响应,php,laravel,validation,laravel-request,Php,Laravel,Validation,Laravel Request,我正在用Laravel构建一个RESTAPI,并想知道是否有一种方法可以在验证时自定义API响应 例如,我在一个Laravel请求中有一个验证规则,表示需要一个特定字段 public function rules() { return [ 'title'=>'required|min:4|max:100', ]; } 因此,对于这个验证,我在Postman中得到如下错误消息 { "title": [ "Please enter Ad Ti

我正在用Laravel构建一个RESTAPI,并想知道是否有一种方法可以在验证时自定义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"
    ]
}
因此,错误更加具体和明确

那么,如何做到这一点呢


谢谢

为名为
messages
FormRequest
类提供一个自定义函数,并返回使用
点表示法映射的验证消息数组,用于特定规则上的特定消息:

public function messages()
{
    return [
        'title.required' => 'Please enter an Ad title',
        'title.min' => 'Your title must be at least 4 character'
    ]
}
返回
success
消息是徒劳的,因为如果消息失败,那么执行
ajax
请求时将抛出
422
错误代码


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

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

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

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

请将这两行代码添加到您的应用程序\Http\Requests\PostRequest.php

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
然后将此函数添加到文件中

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


您不会显示正在验证的位置,但可以尝试在将验证响应发送回之前对其进行解析。谢谢!但是,我已经用自定义错误消息覆盖了messages方法。我感到困惑的是
success
消息。我认为在API响应中必须这样才能识别状态。
protected function failedValidation(Validator $validator) { 
        $response = [
            'status' => false,
            'message' => $validator->errors()->first(),
            'data' => $validator->errors()
        ];
        throw new HttpResponseException(response()->json($response, 200)); 
    }