Wes*_*ijk 9 validation json laravel
快问。是否可以更改 laravel 的 JSON 验证响应?这是我在 Laravel 中构建的自定义 API。
验证过程
$validation = $this->validate(
$request, [
'user_id' => 'required',
]);
Run Code Online (Sandbox Code Playgroud)
响应在 json 中显示如下
{
"message": "The given data was invalid.",
"errors": {
"user_id": [
"The user id field is required."
],
}
}
Run Code Online (Sandbox Code Playgroud)
最好它会变成这样。
{
"common:" [
"status": "invalid",
"message": "Param xxxx is required",
],
}
Run Code Online (Sandbox Code Playgroud)
改变这种情况的最佳方法是什么?有可能吗?
谢谢。
我正在寻找这个问题的答案,我想我找到了更好的方法。默认 Laravel 应用程序中有一个异常处理程序 - \App\Exceptions\Handler
- 您可以重写该invalidJson
方法:
<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Validation\ValidationException;
class Handler extends ExceptionHandler
{
// ...
protected function invalidJson($request, ValidationException $exception)
{
$errors = [];
foreach ($exception->errors() as $field => $messages) {
foreach ($messages as $message) {
$errors[] = [
'code' => $field,
'message' => $message,
];
}
}
return response()->json([
'error' => $errors,
], $exception->status);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
你可以做到这一点,并且它将在全球范围内得到体现。导航到下面的文件夹并使用 Controller.php app/Http/Controllers
use Illuminate\Http\Request;
Run Code Online (Sandbox Code Playgroud)
在 Controller.php 中编写以下方法并根据需要更改响应。
public function validate(
Request $request,
array $rules,
array $messages = [],
array $customAttributes = [])
{
$validator = $this->getValidationFactory()
->make(
$request->all(),
$rules, $messages,
$customAttributes
);
if ($validator->fails()) {
$errors = (new \Illuminate\Validation\ValidationException($validator))->errors();
throw new \Illuminate\Http\Exceptions\HttpResponseException(response()->json(
[
'status' => false,
'message' => "Some fields are missing!",
'error_code' => 1,
'errors' => $errors
], \Illuminate\Http\JsonResponse::HTTP_UNPROCESSABLE_ENTITY));
}
}
Run Code Online (Sandbox Code Playgroud)
我已经用 Laravel 5.6 尝试过了,也许这对你有用。
归档时间: |
|
查看次数: |
4546 次 |
最近记录: |