在 Lumen 7 中验证时如何 return 自定义 JSON 数组名称和内部元素?
How to return custom JSON array name and elements inside when validating in Lumen 7?
我正在尝试 return JSON Lumen 7.2.1 中的验证错误消息
此刻邮递员 return给我发这个:
{
"last_name": [
"Pole zawiera niepoprawne znaki"
],
"email": [
"Email jest już zajęty"
]
}
我想要return这样的东西:
{
errors: [
"last_name": [
"Pole zawiera niepoprawne znaki"
],
"email": [
"Email jest już zajęty"
]
]
}
这是我在控制器中的更新方法:
/**
* Update user
*
* @param Request $request
* @param $id
* @return JsonResponse
* @throws ValidationException
*/
public function update(Request $request, $id)
{
//validate incoming request
$this->validate($request,
[
'name' => 'required|string|alpha',
'last_name' => 'required|string|alpha',
'email' => 'required|email|unique:users',
],
[
'name.required' => 'Pole Imię jest wymagane',
'name.alpha' => 'Pole zawiera niepoprawne znaki',
'last_name.required' => 'Pole Nazwisko jest wymagane',
'last_name.alpha' => 'Pole zawiera niepoprawne znaki',
'email.required' => 'Pole Email jest wymagane',
'email.email' => 'Niepoprawny email',
'email.unique' => 'Email jest już zajęty',
]);
try {
$user = User::findorFail($id);
$user->update($request->all());
return response()->json(['data' => $user], 200);
} catch (\Exception $e) {
return response()->json(['message' => 'User Update Failed!'], 409);
}
}
我尝试添加 $errors = ['name.required'...,] 但结果是一样的。
首先,控制器中的在线验证根本不是最佳方法,使用 FormRequest
更简洁,您可以免费处理错误。我曾经对自己撒谎说在线方法更快,不,不是。
class UpdateUserRequest extends FormRequest {
public function rules() {
return [
'name' => 'required|string|alpha',
'last_name' => 'required|string|alpha',
'email' => 'required|email|unique:users',
];
}
public function messages() {
return [
'name.required' => 'Pole Imię jest wymagane',
'name.alpha' => 'Pole zawiera niepoprawne znaki',
'last_name.required' => 'Pole Nazwisko jest wymagane',
'last_name.alpha' => 'Pole zawiera niepoprawne znaki',
'email.required' => 'Pole Email jest wymagane',
'email.email' => 'Niepoprawny email',
'email.unique' => 'Email jest już zajęty',
];
}
}
转换您的验证异常应该在 Exceptions/Handler.php
中完成,这将使所有异常正确转换,从多个控制器中删除笨拙的逻辑。
public function render($request, \Throwable $exception)
{
if ($request->expectsJson() && $exception instanceof ValidationException) {
return response()->json([
'errors' => $exception->errors(),
], Response::HTTP_UNPROCESSABLE_ENTITY);
}
...
}
检查 API 是否请求或避免使用 $request->expectsJson()
进行此转换,否则只需转换结果,我们就可以使您的控制器方法像这样简单。
public function update(UpdateUserRequest $request, $id)
{
$user = User::findorFail($id);
$user->update($request->all());
return response()->json(['data' => $user], 200);
}
捕获所有异常没有任何作用,让 Exceptions/Handler.php
也处理它。对于奖励积分,也可以为用户使用模型绑定。但我认为这是一个足够大的转变。
我正在尝试 return JSON Lumen 7.2.1 中的验证错误消息
此刻邮递员 return给我发这个:
{
"last_name": [
"Pole zawiera niepoprawne znaki"
],
"email": [
"Email jest już zajęty"
]
}
我想要return这样的东西:
{
errors: [
"last_name": [
"Pole zawiera niepoprawne znaki"
],
"email": [
"Email jest już zajęty"
]
]
}
这是我在控制器中的更新方法:
/**
* Update user
*
* @param Request $request
* @param $id
* @return JsonResponse
* @throws ValidationException
*/
public function update(Request $request, $id)
{
//validate incoming request
$this->validate($request,
[
'name' => 'required|string|alpha',
'last_name' => 'required|string|alpha',
'email' => 'required|email|unique:users',
],
[
'name.required' => 'Pole Imię jest wymagane',
'name.alpha' => 'Pole zawiera niepoprawne znaki',
'last_name.required' => 'Pole Nazwisko jest wymagane',
'last_name.alpha' => 'Pole zawiera niepoprawne znaki',
'email.required' => 'Pole Email jest wymagane',
'email.email' => 'Niepoprawny email',
'email.unique' => 'Email jest już zajęty',
]);
try {
$user = User::findorFail($id);
$user->update($request->all());
return response()->json(['data' => $user], 200);
} catch (\Exception $e) {
return response()->json(['message' => 'User Update Failed!'], 409);
}
}
我尝试添加 $errors = ['name.required'...,] 但结果是一样的。
首先,控制器中的在线验证根本不是最佳方法,使用 FormRequest
更简洁,您可以免费处理错误。我曾经对自己撒谎说在线方法更快,不,不是。
class UpdateUserRequest extends FormRequest {
public function rules() {
return [
'name' => 'required|string|alpha',
'last_name' => 'required|string|alpha',
'email' => 'required|email|unique:users',
];
}
public function messages() {
return [
'name.required' => 'Pole Imię jest wymagane',
'name.alpha' => 'Pole zawiera niepoprawne znaki',
'last_name.required' => 'Pole Nazwisko jest wymagane',
'last_name.alpha' => 'Pole zawiera niepoprawne znaki',
'email.required' => 'Pole Email jest wymagane',
'email.email' => 'Niepoprawny email',
'email.unique' => 'Email jest już zajęty',
];
}
}
转换您的验证异常应该在 Exceptions/Handler.php
中完成,这将使所有异常正确转换,从多个控制器中删除笨拙的逻辑。
public function render($request, \Throwable $exception)
{
if ($request->expectsJson() && $exception instanceof ValidationException) {
return response()->json([
'errors' => $exception->errors(),
], Response::HTTP_UNPROCESSABLE_ENTITY);
}
...
}
检查 API 是否请求或避免使用 $request->expectsJson()
进行此转换,否则只需转换结果,我们就可以使您的控制器方法像这样简单。
public function update(UpdateUserRequest $request, $id)
{
$user = User::findorFail($id);
$user->update($request->all());
return response()->json(['data' => $user], 200);
}
捕获所有异常没有任何作用,让 Exceptions/Handler.php
也处理它。对于奖励积分,也可以为用户使用模型绑定。但我认为这是一个足够大的转变。