【问题标题】:How to get a key value errors response if validator fails in laravel如果验证器在 laravel 中失败,如何获得键值错误响应
【发布时间】:2021-02-10 20:33:17
【问题描述】:

我正在使用 Laravel 7 并且正在做一个 API 项目。如果验证器失败,我想获得键值错误响应。

这是我在子控制器中的代码:

    $rules = array(
        'source' => 'required',
        'customerId' => 'required|integer',
        'statusCode' => 'exists:status,status_name',
        'requestType' => 'exists:request_types,variable',
        'login' => '',
        'yearCreationDate' => 'digits:4|integer|min:1900|max:'.(date('Y')+1),
        'assistanceRequestIds.*' => 'integer',
        'variationId' => 'integer',
    ); 

    $validator = Validator::make( $request->all(), $rules );

    if ( $validator->fails() ) 
    {
        return parent::return_failed_response('Bad Request', $validator->errors()->all(), '400');
    }

这是父控制器中调用的函数:

protected function return_failed_response ($code, $description, $header)
{

    $return_data = array (
        "code" => $code,
        "description" => $description,
    );

    return response()->json($return_data, $header)->header('Code', $header);
}

不幸的是,我从验证器收到的响应具有以下 json 格式:

{

    "code": "Bad Request",
    "description": [
        "The source field is required",
        "The customer id field is required."
    ]
}

但我希望收到以下 json 格式的响应:

{
    "code": "Bad Request",
    "description": {
        "source": [
            "The source field is required"
        ],
        "customerId": [
            "The customer id field is required."
        ]
    }
}

是否有可能从 Laravel 的验证者那里获得类似的响应?可以帮忙吗?

【问题讨论】:

  • 您不认为您可以编写自己的响应数组并返回它吗?
  • 你能给我举个例子吗?
  • 阅读这些主题。 laravel.com/docs/8.x/…

标签: laravel validation


【解决方案1】:

MessageBag 对象的all() 只返回所有发生的错误消息,而不返回它们的相关键。请改用toArray

if ($validator->fails()) {
    return parent::return_failed_response('Bad Request',
        $validator->errors()->toArray(), 400);
}

此方法的可用别名是messages()getMessages()

【讨论】:

  • 好的完美解决方案!
【解决方案2】:

如果你dd($validator->errors())你会看到

Illuminate\Support\MessageBag {#3535 ▼
  #messages: array:1 [▶]
  #format: ":message"
}

你需要得到的是messages$validator->errors()->messages()可以访问

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2020-03-22
    • 2018-10-04
    • 2012-02-15
    • 2021-10-16
    • 2015-12-18
    • 2020-04-24
    • 2021-02-18
    • 2017-10-21
    相关资源
    最近更新 更多