从 Slim v3 中的重定向捕获状态代码
Catching status code from redirect in Slim v3
我有一个视图将表单发送到另一个路由,这会检查表单中的所有数据是否正确,但如果不正确,则此路由 (/check) 必须重定向到具有表单 (/form) 的视图使用代码 XXX 这样我就可以捕捉到这段代码,并且我可以知道问题出在哪里(数据不正确,表格未填写......)。
问题是 $response->getStatusCode();
也 returns 200
.
路线显示如下:
$app->get('/form', function($request, $response, $arguments) {
$error = array("error" => false);
echo $response->getStatusCode(); //Always print 200
if($response->getStatusCode() == XXX)
$error["error"] = true;
return $this->view->render($response, "form.php", $error);
});
$app->post('/check', function($request, $response, $arguments) {
return $response->withHeader('Location', '/form')->withStatus(403);
});
responsecode 来自当前响应,因此默认为 200,如果您未在当前路由中更改它。
在每个请求中都会创建响应对象,因此它不会保存您之前输入的值。
你可以这样想
- 客户请求
/check
- 带有重定向和 403 的服务器响应
- 客户端重定向和请求
/form
- <-- 你现在在这里,你无法知道重定向中的 403 状态码。
您可以使用 url 参数,例如 ?error=true
、会话或 cookie。
或:
不要重定向并将 post 添加到 /form
并在那里验证它。
我有一个视图将表单发送到另一个路由,这会检查表单中的所有数据是否正确,但如果不正确,则此路由 (/check) 必须重定向到具有表单 (/form) 的视图使用代码 XXX 这样我就可以捕捉到这段代码,并且我可以知道问题出在哪里(数据不正确,表格未填写......)。
问题是 $response->getStatusCode();
也 returns 200
.
路线显示如下:
$app->get('/form', function($request, $response, $arguments) {
$error = array("error" => false);
echo $response->getStatusCode(); //Always print 200
if($response->getStatusCode() == XXX)
$error["error"] = true;
return $this->view->render($response, "form.php", $error);
});
$app->post('/check', function($request, $response, $arguments) {
return $response->withHeader('Location', '/form')->withStatus(403);
});
responsecode 来自当前响应,因此默认为 200,如果您未在当前路由中更改它。 在每个请求中都会创建响应对象,因此它不会保存您之前输入的值。
你可以这样想
- 客户请求
/check
- 带有重定向和 403 的服务器响应
- 客户端重定向和请求
/form
- <-- 你现在在这里,你无法知道重定向中的 403 状态码。
您可以使用 url 参数,例如 ?error=true
、会话或 cookie。
或:
不要重定向并将 post 添加到 /form
并在那里验证它。