从 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 并在那里验证它。