所以基本上,我一直在使用laravel开发简单的上传系统。 但是现在的问题是请求验证。我正在尝试检查上传是否符合某些要求。如果不符合要求,
Title field is required
。问题是我无法同时做到两者。
如果我使用此代码(与->setStatusCode(422)
一起使用):
if (isset($request->validator) && $request->validator->fails())
{
return back()
->withInput()
->setStatusCode(422)
->withErrors($request->validator->errors());
//return back()->withError($request->validator->errors())->setStatusCode(422);
}
它发送正确的状态码,但不发送错误,它仅显示以下内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="refresh" content="0;url=http://localhost:8000/dashboard/posts/create/?type=image" />
<title>Redirecting to http://localhost:8000/dashboard/posts/create/?type=image</title>
</head>
<body>
Redirecting to <a href="http://localhost:8000/dashboard/posts/create/?type=image">http://localhost:8000/dashboard/posts/create/?type=image</a>.
</body>
</html>
.....什么意思。
但是,如果我在代码中省略了->setStatusCode(422)
(或将其注释掉),则为:
if (isset($request->validator) && $request->validator->fails())
{
return back()
->withInput()
//->setStatusCode(422)
->withErrors($request->validator->errors());
//return back()->withError($request->validator->errors())->setStatusCode(422);
}
它发送了正确的验证器错误,但发送了一个200
(确定)http状态代码,这不是我想要的。
请提供任何建议。
答案 0 :(得分:2)
back()
返回重定向响应。重定向响应的代码状态为300到399(通常为301或302)。如果响应状态在300到399之间,则浏览器将仅遵循重定向。
您应该做的是根本不更改状态代码,因为验证错误发生在X页上,并且您重定向回了Y页。如果Y页没有引起任何错误,那么您不应显示过时的状态代码。发生错误,但现在您在其他地方。显示错误为时已晚。
一种替代方法是根本不重定向,而是在此处显示带有正确状态代码的错误页面,并带有一个链接(可以选择使用户返回)。