Laravel 8 API 调用未正确返回验证错误
Laravel 8 API call not returning validation errors correctly
我正在使用 Postman 对我的 API 路由进行以下调用,一切正常,直到我强制验证错误。错误对象 returned 不包含验证错误的完整列表,而只有这样的内容:
{"message":"The given data was invalid.","errors":{"email":["validation.email"],"password":["validation.min.string"]}}
我想要的是 return 完整的错误消息而不是“validation.min.string”。
这是我的控制器方法:
public function __invoke(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email|max:255',
'password' => 'required|min:8'
]);
$credentials['status'] = true;
if (Auth::attempt($credentials)) {
return response()->json('login success!');
} else {
return response()->json('login failure!');
}
}
这是邮递员请求的屏幕截图
Screenshot here
创建新的 FormRequest class 并覆盖
中的以下方法
protected function failedValidation(Validator $validator) {
$response = [
'status' => false,
'message' => $validator->errors()->first(),
];
throw new HttpResponseException(response()->json($response, 422));
}
或使用此代码:
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
// your validation rules
])->stopOnFirstFailure(true);
$validator->validate();
它会return只有一条验证消息
作为我的评论:
- 确保文件
resources/lang/en/validation.php
存在
- 如果是,请确保键
email
和 min
存在
旁注:
您可以将文件夹 lang
移动到顶层,它仍然有效。
所以 resources/lang/en
会变成 lang/en
我正在使用 Postman 对我的 API 路由进行以下调用,一切正常,直到我强制验证错误。错误对象 returned 不包含验证错误的完整列表,而只有这样的内容:
{"message":"The given data was invalid.","errors":{"email":["validation.email"],"password":["validation.min.string"]}}
我想要的是 return 完整的错误消息而不是“validation.min.string”。
这是我的控制器方法:
public function __invoke(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email|max:255',
'password' => 'required|min:8'
]);
$credentials['status'] = true;
if (Auth::attempt($credentials)) {
return response()->json('login success!');
} else {
return response()->json('login failure!');
}
}
这是邮递员请求的屏幕截图
Screenshot here
创建新的 FormRequest class 并覆盖
中的以下方法protected function failedValidation(Validator $validator) {
$response = [
'status' => false,
'message' => $validator->errors()->first(),
];
throw new HttpResponseException(response()->json($response, 422));
}
或使用此代码:
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
// your validation rules
])->stopOnFirstFailure(true);
$validator->validate();
它会return只有一条验证消息
作为我的评论:
- 确保文件
resources/lang/en/validation.php
存在 - 如果是,请确保键
email
和min
存在
旁注:
您可以将文件夹 lang
移动到顶层,它仍然有效。
所以 resources/lang/en
会变成 lang/en