是否可以从嵌套数组扩展验证器响应。通常 Laravel 以“点符号”响应,例如:
[
'organisation.name' => 'required|max:60|min:3',
'organisation.avatar' => '',
'organisation.phone' => 'required|max:25|min:5',
'organisation.paid_staff' => 'required|numeric'
]
organisation.name
的错误将返回:
{
"message": "422 Unprocessable Entity",
"errors": {
"organisation.name": [
"The organisation name has already been taken."
]
},
"statusCode": 422
};
我希望将点符号扩展为:
{
"message": "422 Unprocessable Entity",
"errors": {
"organisation": {
"name": [
"The organisation name has already been taken."
]
}
},
"statusCode": 422
};
任何人都可以阐明这一点吗?
最佳答案
我们通过扩展 App\Exceptions\Handler
类方法 invalidJson()
实现了这个结果,如下所示:
/**
* Convert a validation exception into a JSON response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Validation\ValidationException $exception
* @return \Illuminate\Http\JsonResponse
*/
protected function invalidJson($request, ValidationException $exception)
{
$jsonResponse = parent::invalidJson($request, $exception);
$original = (array) $jsonResponse->getData();
$jsonResponse->setData(array_merge($original, [
'statusCode' => $exception->status,
'errors' => Arrays::expandDotNotationKeys((array) $original['errors']),
]));
return $jsonResponse;
}
我们有一个名为 Arrays
的 Utility 类,其方法 expandDotNotationKeys()
如下所示:
/**
* Expands arrays with keys that have dot notation
*
* @param Array $array
*
* @return Array
*/
public static function expandDotNotationKeys(Array $array)
{
$result = [];
foreach ($array as $key => $value) {
array_set($result, $key, $value);
}
return $result;
}
完成!无需更改母语文件。
关于php - Laravel 验证器响应嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36878182/