Return JSON Laravel 8 验证失败的详细信息

Return JSON details of failed validation with Laravel 8

我正在创建一个端点来存储具有两个字段的 Office:名称、地址。 当验证失败时 laravel returns 状态 200 和欢迎页面。它应该 return 4xx 和 JSON 的错误详细信息,不是吗?我试图捕获异常 (ValidationError) 但我没有得到错误详细信息。

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'address' => 'required'
        ]);
        // if validation failed, 4xx?

        // logic to create a model here
        return $office; // everything fine, 201 and object details
    }

我正在使用单元测试和邮递员对其进行测试:

    public function testValidationFailed()
    {
        $payload = [
            "wrongfield" => "Example Name"
        ];

        $response = $this->postJson('/api/offices/', $payload);

对于邮递员 content-type 是 application/json

已编辑 邮递员弄乱了 headers。 httpie 和 curl 使用此代码和接受的答案得到正确的响应。

您可以像这样使用Validator

$validator = Validator::make($request->all(), [
      'name' => 'required',
      'address' => 'required'
]);

if ($validator->fails()) {
   return response()->json($validator->errors(), 404);
}

或者您可以使用 validator() 辅助方法

validator($request->all(), [
    'name' => 'required',
    'address' => 'required'
])->validate();

这将自动验证并返回错误,它也适用于网络和 api 端点。