Php Laravel使用api进行请求验证
我尝试在api中实现验证,如下所示:Php Laravel使用api进行请求验证,php,laravel,validation,Php,Laravel,Validation,我尝试在api中实现验证,如下所示: public function store(RideUpdateRequest $request) { $user = JWTAuth::parseToken()->authenticate(); $ride = Ride::create([ 'user_id' => $user->id, 'time' => $re
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."
]
}
{
"billabletime": [
"The billabletime field is required."
]
}
能给我拿点这样的吗
{
"error": {
"The billabletime field is required."
}
}
{
"error": {
"The billabletime field is required."
}
}
如果查看FormRequest类,您将看到一个
response()
方法,定义如下:
public function response(array $errors)
{
if ($this->expectsJson()) {
return new JsonResponse($errors, 422);
}
...
}
因此,您可以设置Accept:aplication/json
请求头以符合expectsJson
条件,或者通过在自己的RideUpdateRequest类中指定response()
方法强制默认响应行为:
public function response(array $errors)
{
// Always return JSON.
return response()->json($errors, 422);
}
答复:
{
"billabletime": [
"The billabletime field is required."
]
}
{
"billabletime": [
"The billabletime field is required."
]
}
能给我拿点这样的吗
{
"error": {
"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不可处理实体
状态代码与响应一起发送。在Laravel 8中,您可以通过覆盖FormRequest类中的failedValidation函数来控制响应:
使用light\Http\Response;
受保护功能验证失败(\Illumb\Contracts\Validation\Validator$Validator)
{
$response=新响应(['error'=>$validator->errors()->first()],422);
抛出新的ValidationException($validator,$response);
}
谢谢!还有一个问题,我现在收到的不是一个物体。可能吗?请参阅我的编辑以了解我的意思。谢谢你可以试试这个:returnresponse()->json(['error'=>$errors],400)我明白。但在我的angular应用程序中,很难使用这种格式。@Jamie然后你需要决定将多个错误中的哪一个发回。