Если что-то плохое в моем 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
$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();
Если у кого-то еще есть эта проблема, вот что я сделал:
Настройка обработчика ошибок
$ app-> error (функция (исключение $ exc) use ($ app) { // пользовательские коды исключений, используемые для статуса HTTP if ($ exc-> getCode ()! == 0) { $ App-> response-> setStatus ($ EXC-> Получить код ()); } $ app-> response-> headers-> set ('Content-Type', 'application / json'); echo json_encode (["error" => $ exc-> getMessage ()]); });
то в любое время, когда вам нужно вернуть определенный HTTP-статус, выведите исключение с включенным кодом состояния:
throw new Exception («Мое пользовательское исключение с кодом состояния по моему выбору», 401);
(Нашел его на форуме Slim)
Если вам нужно нажать заголовок после $ app-> run (), вы всегда можете положиться на функцию php заголовка:
header('HTTP/1.1 401 Anonymous not allowed');
Слайд-версия 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"); });