Вернуть http 500 с Slim framework

Если что-то плохое в моем 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

Related of "Вернуть http 500 с Slim framework"

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