如果验证器在laravel中失败,如何获得键值错误响应



我正在使用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的验证器那里获得类似的响应吗?能帮忙吗?

MessageBag对象的

all()只返回所有发生的错误消息,而不返回它们的相关密钥。改为使用toArray

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

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

如果您dd($validator->errors()),您将看到

IlluminateSupportMessageBag {#3535 ▼
#messages: array:1 [▶]
#format: ":message"
}

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

相关内容

  • 没有找到相关文章

最新更新