gpt4 book ai didi

php - ajax(api 路由)上的 Laravel 5.6 验证器返回 200 而不是 422

转载 作者:行者123 更新时间:2023-12-03 23:04:50 25 4
gpt4 key购买 nike

我在 Postman 上发布到我的 api 路由(在 api.php 中),当数据验证失败时,它会在 200 响应中返回错误:

enter image description here

上面的响应是我尝试的时候:

{
$valid = validator($request->only('email', 'password'), [
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6',
]);

if ($valid->fails()) {
$jsonError=response()->json($valid->errors()->all(), 400);
return \Response::json($jsonError);
}
}

但是,当我尝试 documentation 中的那个时如下所示,它返回 View (laravel 欢迎页面),类似于 return back()

 $request->validate([
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6',
]);

我发布的数据是:

email: ''
password: ''

// also tried with and without header
Content-Type: application/json

最佳答案

这段代码有问题。

$jsonError=response()->json($valid->errors()->all(), 400);
return \Response::json($jsonError);

$jsonError 已经是一个 JSONResponse 对象,然后你又将它封装在一个 JSONReponse 对象中。

json方法创建了一个新的JSONResponse对象,下面是底层代码。

public function json($data = [], $status = 200, array $headers = [], $options = 0)
{
return new JsonResponse($data, $status, $headers, $options);
}

因此,当您在此处传递 $jsonError 时,它是 $data 参数。现在,$status 参数的默认值为 200,但根据您的代码,您没有传递任何值:

return \Response::json($jsonError);
// ^-- yeah, no $status argument here!

因此您将收到 200 响应是正确的。

要解决您的问题,只需返回您创建的第一个 JSONResponse 对象。

return response()->json($valid->errors()->all(), 400);

如果您仍想坚持使用当前代码,请执行此操作。但这毫无意义。

$jsonError=response()->json($valid->errors()->all(), 400);
return \Response::json($jsonError, 400);

此外,response()->json()Response::json() 相同 :)

关于php - ajax(api 路由)上的 Laravel 5.6 验证器返回 200 而不是 422,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49397159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com