【问题标题】:Customize Laravel API validation responses自定义 Laravel API 验证响应
【发布时间】:2018-06-17 18:29:26
【问题描述】:

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

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

那么,如何实现呢?

谢谢!

【问题讨论】:

  • 您没有显示您正在验证的位置,但您可以在发回之前尝试解析验证响应。

标签: php laravel validation laravel-request


【解决方案1】:

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 消息是徒劳的,就好像它失败一样,无论如何执行ajax 请求时都会抛出422 错误代码。

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

【讨论】:

  • 谢谢!但是,我已经用自定义错误消息覆盖了消息方法。我感到困惑的是success 消息。我认为这是 API 响应中必须确定的状态。
【解决方案2】:

您可以自定义错误,检查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
 ]);

【讨论】:

    【解决方案3】:

    我为您的 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)); 
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-07
      • 2019-07-09
      • 2019-10-07
      • 2020-07-18
      • 1970-01-01
      • 2018-08-26
      • 2019-06-25
      • 2017-09-24
      相关资源
      最近更新 更多