首页 > 解决方案 > 使用自定义 json 响应进行 Laravel 验证

问题描述

快速提问。是否可以更改 laravel 的 JSON 验证响应?这是针对我在 Laravel 中构建的自定义 API。

验证过程

$validation = $this->validate( 
    $request, [
        'user_id' => 'required', 
    ]);

响应在 json 中显示如下

{
  "message": "The given data was invalid.",
  "errors": {
    "user_id": [
      "The user id field is required."
    ],
  }
}

最好是变成这样。

{
    "common:" [
        "status": "invalid",
        "message": "Param xxxx is required",
    ],
}

改变这种情况的最佳方法是什么?甚至可能吗?

谢谢你。

标签: jsonlaravelvalidation

解决方案


您可以这样做,它将在全球范围内反映出来。导航到下面的文件夹并使用 Controller.php app/Http/Controllers

use Illuminate\Http\Request;

在 Controller.php 中编写以下方法并根据需要更改响应。

public function validate(
    Request $request,
    array $rules,
    array $messages = [],
    array $customAttributes = [])
{
    $validator = $this->getValidationFactory()
        ->make(
            $request->all(),
            $rules, $messages,
            $customAttributes
        );
    if ($validator->fails()) {
        $errors = (new \Illuminate\Validation\ValidationException($validator))->errors();
        throw new \Illuminate\Http\Exceptions\HttpResponseException(response()->json(
            [
                'status' => false,
                'message' => "Some fields are missing!",
                'error_code' => 1,
                'errors' => $errors
            ], \Illuminate\Http\JsonResponse::HTTP_UNPROCESSABLE_ENTITY));
    }
}

我已经用 Laravel 5.6 试过了,也许这对你有用。


推荐阅读