Верните 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


person rubin    schedule 12.11.2012    source источник


Ответы (4)


$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();
person MrCode    schedule 12.11.2012
comment
$app = новый Slim(); $app-›response()-›status(500); $app-›run(); Он по-прежнему возвращает http 200 в fiddler, но веб-представление теперь 404. Почему? - person rubin; 12.11.2012
comment
Проверьте код ответа с помощью HTTPLiveHeaders, Firebug или Chrome Dev Tools (F12). - person MrCode; 12.11.2012
comment
Он возвращает http 200 в скрипаче и в Firebug. - person rubin; 12.11.2012
comment
Попробуйте удалить все операторы echo или другой вывод и перезапустите код. - person MrCode; 12.11.2012
comment
Он уже удален. По-прежнему возвращайте http 200 как в скрипаче, так и в Firebug. Работает ли это для вас? - person rubin; 12.11.2012
comment
@rubin попробуйте мой пример кода (работает), если вы не определите маршрут, он выдаст 404. - person MrCode; 12.11.2012

Если у кого-то все еще есть эта проблема, вот что я сделал:

Настройте обработчик ошибок


    $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)

person famu1hundred    schedule 31.10.2014

Если вам нужно отправить заголовок после $app->run(), вы всегда можете положиться на функцию php заголовка:

header('HTTP/1.1 401 Anonymous not allowed');
person Chris    schedule 23.04.2013
comment
Нет, я определил некоторые маршруты, например: $rest-›post('/path', function () use ($rest, $variable){ ... if(что-то не так) { header('HTTP/1.1 400 JSON неверный'); exit(); } } - person Chris; 11.03.2014
comment
Это сработало для меня, когда status() и setStatus() Слима не смогли изменить код состояния. Спасибо! Для других обратите внимание, что начиная с PHP 5.4 вы можете использовать http://php.net/http_response_code следующим образом: http_response_code(500); - person Cole Marshall; 02.02.2016

Slim framework v2 статус вики

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();

or

$app->get('/', function () use ($app) {
  $app->halt(500, "responseText");
});
person Andrei Krasutski    schedule 14.11.2016