在我的CakePHP 2应用程序中,我遇到了beforeFilter的问题。 在this thread,它运作良好。因为CakePHP的旧版本。
在我的代码中,如果用户未获得授权,我想向他显示“anotherview.ctp”。 我不想将访问者重定向到另一个页面。 (因为adsense问题)
当我在beforeFilter中使用“this-> render”时,我的“index”操作中的代码也会运行。 我想在“beforeFilter”的最后一行之后停止执行。 当我将“exit()”添加到beforeFilter时,它破坏了我的代码。
如何在不破坏代码的情况下停止在beforeFilter中执行?
class MyController extends AppController {
function beforeFilter() {
if ( $authorization == false ) {
$this->render('anotherview');
//exit();
}
}
}
function index() {
// show authorized staff
}
}
答案 0 :(得分:18)
尝试:
$this->response->send();
$this->_stop();
答案 1 :(得分:4)
我在尝试做同样的事情时偶然发现了这个帖子。接受的答案有效,但省略了一个重要的细节。我正在尝试渲染布局(而不是视图),我不得不添加一行以防止原始请求的视图抛出错误。
内部AppController::beforeFilter()
:
$this->render(FALSE, 'maintenance'); //I needed to add this
$this->response->send();
$this->_stop();
答案 2 :(得分:1)
或者 - 重定向到另一个视图:
if ( $authorization == false ) {
$this->redirect('/users/not_authorized');
}
答案 3 :(得分:0)
对于CakePHP 3.5,这对我有用:
$event->setResult($this->render('anotherview'));
这还将使您能够使用调试器。当我使用exit;
语句时,CakePHP调试器停止工作。