如果我的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
答案 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");
});