正在从Slim v3中的重定向捕获状态代码


Catching status code from redirect in Slim v3

我有一个视图,它将表单发送到另一个路由,并检查表单中的所有数据是否正确,但如果不正确,则此路由(/check)必须重定向到带有代码XXX的表单(/form)的视图,这样我就可以捕获此代码,并知道问题出在哪里(数据不正确,表单未填充…)。问题是$response->getStatusCode();也返回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);    
});

响应代码来自当前响应,因此当您不在当前路由中更改它时,它是默认的200。响应对象会在每个请求中创建,因此它不会保存您之前输入的值。

你可以像一样接受

  • 客户端请求/check
  • 带有重定向和403的服务器响应
  • 客户端重定向和请求/form
  • <--现在,您无法知道重定向中的403状态代码

您可以使用url参数,如?error=true、会话或cookie。

或:

不要重定向并将帖子添加到/form并在那里验证。