【问题标题】:How to convert Laravel 7 error json to this new json如何将 Laravel 7 错误 json 转换为这个新的 json
【发布时间】:2021-02-16 02:53:34
【问题描述】:

你好,我想知道我是否可以将 Laravel 的错误 json 转换成这个新的 json。 我正在使用 Laravel 7

  {
        "message": "The given data was invalid.",
        "errors": {
            "email": [
                "email is already in use"
            ],
            "username": [
                "username is already in use"
            ]
        }
    }

{
    "message": "The given data was invalid.",
    "errors": {
        "email": "email is already in use",
        "username": "username is already in use"
    }
}

【问题讨论】:

  • 你的控制器内部是使用Validator外观还是$request->validate()

标签: php json laravel


【解决方案1】:

在控制器内部,如果您使用 Validator 外观验证您的 POST 请求,您可以将错误转换为集合并映射到它们。

use Illuminate\Support\Facades\Validator;

// Faking the Request array & Commenting out to fail request
$input = [
  // 'username' => 'username',
  // 'password' => 'password',
];

$validator = Validator::make((array) $input, [
  'username' => 'required|unique|string',
  'password' => 'required|string',
]);

if ($validator->fails()) {
  $formatted = collect($validator->errors())->map(function ($error) {
    return $error[0];
  });

  return response()->json([
      'message' => 'The given data was invalid.',
      'errors' => $formatted,
    ], 422);
}

【讨论】:

    【解决方案2】:

    我会提出一种不同的方法来解决这个问题。

    在您的用户模型中,您可以添加一个名为 ValidationBook 的类方法。

    public static function ValidationBook($except = [], $append = [])
    {
        $book = ['rules' => [], 'messages' => []];
        $book['rules'] = [
            'user.email' => 'required|email|unique:users,email',
            'user.password' => 'required|min:8',
            'user.password_confirmation' => 'required|min:8|same:user.password',
        ];
        $book['messages'] = [
            'user.email.required' => 'The email is required',
            'user.email.email' => 'The email must be a valid email address.',
            'user.email.unique' => 'This email is already in use.',
    
            'user.password.required' => 'A password is required.',
            'user.password.min' => 'Password musst have at least 8 characters',
    
            'user.password_confirmation.required' => 'The password confirmation is required.',
            'user.password_confirmation.same' => 'Passwords doesn't match',
        ];
        if (!empty($except)) {
            $except = array_flip($except);
            $book['rules'] = array_diff_key($book['rules'], $except);
        }
        if (!empty($append))
            $book = array_merge_recursive($book, $append);
    
        return $book;
    }
    

    然后,在接收请求的控制器中,您可以简单地执行以下操作:

    $vb = User::ValidationBook();
    $vb["rules"]["user.client_secret"] .= $request->input("user")["client_id"];
    $data = $request->validate($vb["rules"], $vb["messages"]);
    

    请注意,您可以定义每个错误,如果有多个问题,响应将发送所有失败的规则。

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多