Коды ошибок останова Slim Framework не работают

Я только что создал успокаивающий API с Slim Framework. Для условий ошибок я просто отвечаю соответствующими кодами ошибок для каждого случая ошибки и вызываю с помощью $app->halt, например:

$app->halt(403, "Unauthorized");

Но когда я свернул свой API с помощью -v и когда я просматривал заголовки в Firefox с помощью HTTPFox, я всегда вижу код ошибки 500. Кто-нибудь еще заметил это? Я что-то упускаю?

3 ответа

Недавно я столкнулся с этой же проблемой, потому что я забыл создать экземпляр переменной $app в своей функции.

Если вы явно не указали для использования своей функции ($app), попробуйте добавить следующую строку перед $app-halt(403, 'Unauthorized'), чтобы увидеть нужный код ошибки:

$app = Slim::getInstance();

Не разрешается вызывать метод halt() за пределами обратного вызова маршрута. Вы должны использовать как это;

$app->get('/method/', function () {
  //logical controls
  //do something
    //or
  $app->halt();
});   

Существует разница между halt() и setStatus().

С помощью halt() вы остановите текущее выполнение скрипта и выдадите ответ в соответствии с кодом состояния HTTP и сообщением, которое вы выбрали для отправки. Вы можете сделать это в любом месте вашего приложения с помощью этого кода:

$app = \Slim\Slim::getInstance(); //if you don't have access to $app
$statusCode = 403;
$body = 'Unauthorized';
$app->halt($statusCode, $body);
//App will stop immediately

С помощью setStatus () или $this->response->status(); вы только измените код состояния HTTP, который вы отправляете, но ваше приложение продолжит работать как обычно и не остановится. Изменяется только заголовок, который Slim отправит вашему клиенту в конце выполнения маршрута.

$app = \Slim\Slim::getInstance(); //if you don't have access to $app
$statusCode = 403;
$app->response->setStatus(400);
//App will continue normally
Другие вопросы по тегам