是否可以从嵌套数组扩展验证器响应。通常,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;
}
完成!无需更改本地语言文件。
我自己还没有这样做,但查看文档给出了一个提示 -
在许多情况下,您可能希望指定特定于属性的自定义 语言文件中的消息,而不是将它们直接传递给 验证器。为此,请将消息添加到 resources/lang/xx/validation.php 语言文件。
您的语言文件
'custom' => [
'organisations' => [
'name' => [
'required' => 'The organisation name has already been taken!',
],
],
],