Коды ошибок останова 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