我正在尝试在我的api中实现验证:
public function store(RideUpdateRequest $request)
{
$user = JWTAuth::parseToken()->authenticate();
$ride = Ride::create([
'user_id' => $user->id,
'time' => $request->time,
'date' => $request->date,
'type_id' => $request->type_id,
'location_id' => $request->location_id,
'billabletime' => $request->billabletime
]);
$ride->save();
return response()->json(['success' => 'Rit succesvol aangemaakt.'], 200);
}
RideUpdateRequest:
public function rules()
{
return [
'time' => 'required|integer',
'date' => 'required|date',
'type_id' => 'required|integer',
'location_id' => 'required|integer',
'billabletime' => 'required|integer'
];
}
那我怎么能在json中给出一条错误信息(如果请求验证失败)?现在邮递员我什么都收不到?
- 编辑 -
响应:
{
"billabletime": [
"The billabletime field is required."
]
}
我可以得到这样的东西吗?:
{
"error": {
"The billabletime field is required."
}
}
答案 0 :(得分:2)
如果您查看 FormRequest 类,您会看到response()
方法定义为:
public function response(array $errors)
{
if ($this->expectsJson()) {
return new JsonResponse($errors, 422);
}
...
}
因此,您可以设置Accept: aplication/json
请求标头以符合expectsJson
条件,也可以通过在您自己的 RideUpdateRequest <中分离response()
方法来强制执行默认响应行为/ strong> class:
public function response(array $errors)
{
// Always return JSON.
return response()->json($errors, 422);
}
答案 1 :(得分:1)
响应:
{ "billabletime": [ "The billabletime field is required." ] }
我可以得到这样的东西吗?:
{ "error": { "The billabletime field is required." } }
Laravel使用此格式是因为a)可能有多个字段未通过验证; b)特定字段可能存在多个故障。
例如:
{
"email": [
"The email field is invalid."
],
"password": [
"The password field must contain a number.",
"The password field must contain a special character."
]
}
您的"error": { ... }
也是不必要的,因为Laravel的验证系统会在响应时发送422 Unprocessable Entity
状态代码。
答案 2 :(得分:0)
在 laravel 8 中,您可以通过覆盖 FormRequest 类中的 failedValidation 函数来控制响应:
use Illuminate\Http\Response;
protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator)
{
$response = new Response(['error' => $validator->errors()->first()], 422);
throw new ValidationException($validator, $response);
}