【问题标题】:Slim framework halt error codes not workingSlim 框架停止错误代码不起作用
【发布时间】:2015-06-19 18:03:30
【问题描述】:

我刚刚使用 Slim 框架构建了一个宁静的 API。对于错误情况,我只需针对每个错误情况使用适当的错误代码进行响应,并使用 $app->halt 进行调用,例如:

$app->halt(403, "Unauthorized");

但是当我使用 -v 卷曲我的 API 并使用 HTTPFox 在 Firefox 中查看标头时,我总是看到错误代码 500。其他人注意到了吗?我有什么遗漏吗?

【问题讨论】:

  • 我从未使用过halt() 方法,当我想返回特定的http 状态时我使用$app->response()->status(403)。我不确定有什么区别。
  • 假设我会尝试。但是苗条的文档特别说您可以使用停止提供状态代码。再说一次,也许我不明白。

标签: php curl http-status-codes slim httpfox


【解决方案1】:

我最近自己也遇到了同样的问题,因为我忘记在我的函数中实例化 $app 变量。

如果您没有明确说明要使用的函数 ($app),请尝试在 $app-halt(403, 'Unauthorized') 之前添加以下行以查看所需的错误代码:

$app = Slim::getInstance();

【讨论】:

    【解决方案2】:

    不允许在路由回调之外调用halt()方法。 你应该这样使用;

    $app->get('/method/', function () {
      //logical controls
      //do something
        //or
      $app->halt();
    });   
    

    【讨论】:

      【解决方案3】:

      halt() 和 setStatus() 是有区别的。

      使用 halt(),您将停止当前脚本执行并根据您选择发送的 HTTP 状态代码和消息呈现响应。您可以使用此代码在应用程序的任何位置执行此操作:

      $app = \Slim\Slim::getInstance(); //if you don't have access to $app
      $statusCode = 403;
      $body = 'Unauthorized';
      $app->halt($statusCode, $body);
      //App will stop immediately
      

      使用 setStatus()$this->response->status(); 您只会更改您发送的 HTTP 状态代码,但您的应用会继续正常执行,不会停止。它只是在路由执行结束时更改 Slim 将发送给您的客户端的标头。

      $app = \Slim\Slim::getInstance(); //if you don't have access to $app
      $statusCode = 403;
      $app->response->setStatus(400);
      //App will continue normally
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多