在 beforeFilter 中结束 CakePHP 2.6 请求的正确方法

Proper way to end request in CakePHP 2.6 in beforeFilter

在 CakePHP 2.6 中,有时我想在 beforeFilter() 回调中结束当前请求,并可能发出禁止或未找到结果状态。

在控制器操作中,我知道我可以通过返回 CakeResponseobject 来做到这一点,但我想在回调中这样做。是否有正确的 CakePHP 方法来确保调用所有回调并正确处理应用程序,或者我可以只发送 headers 并调用 die()

提前致谢。

您是否尝试过在 beforeFilter() 中返回 CakeResponse 对象是否以同样的方式工作?如果没有看到 CakeResponse::send() and Object::_stop() 并执行此操作:

$this->response->body('whatever you need here');
$this->response->send();
$this->_stop();

通过抛出异常,您就可以做到这一点。没有其他必要的:

throw new ForbiddenException();

throw new NotFoundException();

等等

这是提早退出的干净方法。 error/exception 处理程序会自动将其格式化为必要的输出格式(html、json、xml、...)并发送正确的 headers(状态代码,...)。

切勿使用 die()/exit。切勿手动发送 headers。它使您的代码无法测试。