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

时间:2016-05-06 18:53:58

标签: php redirect slim http-status-codes

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

1 个答案:

答案 0 :(得分:2)

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

你可以这样做

  • 客户请求$root = $uploads['path']; $imgDir = $root.$path.".jpg"; if (file_exists($imgDir)){ ....... }
  • 带有重定向和403
  • 的服务器响应
  • 客户重定向并请求/check
  • < - 现在就在这里,您无法知道重定向中的403状态代码。

您可以使用/form等网址参数,会话或Cookie。

OR:

不要重定向并将帖子也添加到?error=true并在那里验证。