Php Laravel使用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

我尝试在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."
  ]
}
{
  "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)