6

如果我的 API 出现问题,我想返回一个 http 500 请求。

$app = new Slim();
$app->halt(500);

它仍然返回 http 200。

如果我运行此代码:

    $status = $app->response()->status(); 
    echo $status; //Here it is 200
$status = $app->response()->status(500);
    echo $status; //Here it is 500

它仍然给我一个 http 200

4

4 回答 4

6

如果有人仍然有这个问题,我最终会这样做:

设置错误处理程序

    $app->error(function (Exception $exc) 使用 ($app) {
       // 用于 HTTP 状态的自定义异常代码
       if ($exc->getCode() !== 0) {
          $app->response->setStatus($exc->getCode());
       }

       $app->response->headers->set('Content-Type', 'application/json');
       echo json_encode(["error" => $exc->getMessage()]);
    });

然后,只要您需要返回特定的 HTTP 状态,就会抛出一个包含状态代码的异常:

    throw new Exception("我的自定义异常和我选择的状态码", 401);

(在 Slim 论坛上找到它)

于 2014-10-31T19:50:05.613 回答
6

$app->response()->status(500);是正确的,请参阅此处的文档。

检查以确保您$app->run();在设置状态后调用,这将准备并输出响应代码、标头和正文。

编辑,确保你定义了一个路由,否则 Slim 会输出 404 响应,这行得通:

require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();

$app = new \Slim\Slim();

$app->response()->status(500);

$app->get('/', function () {
    // index route
});

$app->run();
于 2012-11-12T15:30:54.507 回答
2

如果你必须在 $app->run() 之后推送 header,你总是可以依赖 header php 函数:

header('HTTP/1.1 401 Anonymous not allowed');
于 2013-04-23T14:31:56.280 回答
0

Slim 框架 v2 wiki 状态

require 'Slim/Slim.php';

\Slim\Slim::registerAutoloader();

$app = new \Slim\Slim();

$app->get('/', function () use ($app) {
  $app->response()->setStatus(500);
  $app->response()->setBody("responseText");  
  return $app->response();
});

$app->run();

或者

$app->get('/', function () use ($app) {
  $app->halt(500, "responseText");
});
于 2016-11-14T22:48:33.427 回答