在CakePHP的beforeFilter中渲染后停止执行

时间:2012-05-27 09:52:50

标签: cakephp cakephp-2.0 before-filter

在我的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
    }           
}

4 个答案:

答案 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调试器停止工作。