在 beforeFilter 中结束 CakePHP 2.6 请求的正确方法
Proper way to end request in CakePHP 2.6 in beforeFilter
在 CakePHP 2.6 中,有时我想在 beforeFilter()
回调中结束当前请求,并可能发出禁止或未找到结果状态。
在控制器操作中,我知道我可以通过返回 CakeResponse
object 来做到这一点,但我想在回调中这样做。是否有正确的 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。它使您的代码无法测试。
在 CakePHP 2.6 中,有时我想在 beforeFilter()
回调中结束当前请求,并可能发出禁止或未找到结果状态。
在控制器操作中,我知道我可以通过返回 CakeResponse
object 来做到这一点,但我想在回调中这样做。是否有正确的 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。它使您的代码无法测试。