我刚刚用 Slim 框架构建了一个宁静的 API。对于错误情况,我只需针对每个错误情况使用适当的错误代码进行响应,并使用 $app->halt 进行调用,例如:
$app->halt(403, "Unauthorized");
但是,当我使用 -v 卷曲我的 API 并使用 HTTPFox 在 Firefox 中查看标头时,我总是看到错误代码 500。其他人注意到了吗?有什么我想念的吗?
我刚刚用 Slim 框架构建了一个宁静的 API。对于错误情况,我只需针对每个错误情况使用适当的错误代码进行响应,并使用 $app->halt 进行调用,例如:
$app->halt(403, "Unauthorized");
但是,当我使用 -v 卷曲我的 API 并使用 HTTPFox 在 Firefox 中查看标头时,我总是看到错误代码 500。其他人注意到了吗?有什么我想念的吗?
I ran into this same issue myself recently because I had forgotten to instantiate the $app variable within my function.
If you are not explicitly stating for your function to use($app), try adding the following line before $app-halt(403, 'Unauthorized') in order to see the desired error code:
$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