使用Slim框架返回http 500

时间:2012-11-12 15:13:31

标签: php slim

如果我的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 个答案:

答案 0 :(得分:6)

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

检查以确保在设置状态后调用$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();

答案 1 :(得分:6)

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

设置错误处理程序


    $app->error(function (Exception $exc) use ($app) {
       // custom exception codes used for HTTP status
       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("My custom exception with status code of my choice", 401);

(在Slim论坛上找到它)

答案 2 :(得分:2)

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

header('HTTP/1.1 401 Anonymous not allowed');

答案 3 :(得分:0)

Slim framework v2 wiki status

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");
});