And*_*gan 5 php validation json laravel vue.js
是否可以扩展来自嵌套数组的验证器响应。通常 Laravel 用“点符号”响应,例如:
[
'organisation.name' => 'required|max:60|min:3',
'organisation.avatar' => '',
'organisation.phone' => 'required|max:25|min:5',
'organisation.paid_staff' => 'required|numeric'
]
Run Code Online (Sandbox Code Playgroud)
wold 返回错误organisation.name:
{
"message": "422 Unprocessable Entity",
"errors": {
"organisation.name": [
"The organisation name has already been taken."
]
},
"statusCode": 422
};
Run Code Online (Sandbox Code Playgroud)
我希望将点符号扩展为这样:
{
"message": "422 Unprocessable Entity",
"errors": {
"organisation": {
"name": [
"The organisation name has already been taken."
]
}
},
"statusCode": 422
};
Run Code Online (Sandbox Code Playgroud)
谁能阐明这一点?
我们通过扩展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;
}
Run Code Online (Sandbox Code Playgroud)
我们有一个实用程序类,Arrays其方法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;
}
Run Code Online (Sandbox Code Playgroud)
完毕!无需更改母语文件。
| 归档时间: |
|
| 查看次数: |
1486 次 |
| 最近记录: |