Php 如何将Laravel7错误json转换为新的json
您好,我想知道我是否可以将Laravel的错误json转换成这个新的json。 我正在使用Laravel 7Php 如何将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"
{
"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"]);