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