Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将Laravel7错误json转换为新的json_Php_Json_Laravel - Fatal编程技术网

Php 如何将Laravel7错误json转换为新的json

Php 如何将Laravel7错误json转换为新的json,php,json,laravel,Php,Json,Laravel,您好,我想知道我是否可以将Laravel的错误json转换成这个新的json。 我正在使用Laravel 7 { "message": "The given data was invalid.", "errors": { "email": [ "email is already in use"

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

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


在控制器内部,如果使用验证器外观验证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);
}

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

在用户模型中,可以添加名为
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"]);

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

在控制器内部,您是否使用
验证程序
facade或
$request->validate()
它起作用了。非常感谢你!
$vb = User::ValidationBook();
$vb["rules"]["user.client_secret"] .= $request->input("user")["client_id"];
$data = $request->validate($vb["rules"], $vb["messages"]);