6

在我的 CakePHP 2 应用程序中,我遇到了 beforeFilter 的问题。在这个线程中它运行良好。由于 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

4 回答 4

20

尝试:

$this->response->send();
$this->_stop();
于 2012-05-28T04:10:15.850 回答
4

我在尝试做同样的事情时偶然发现了这个线程。接受的答案有效,但省略了一个重要细节。我正在尝试渲染布局(不是视图),我必须添加一行以防止原始请求的视图抛出错误。

内部AppController::beforeFilter()

$this->render(FALSE, 'maintenance'); //I needed to add this
$this->response->send();
$this->_stop();
于 2014-01-09T16:39:05.643 回答
1

或者 - 重定向到另一个视图:

if ( $authorization == false )  {
    $this->redirect('/users/not_authorized');
}
于 2012-05-28T15:20:48.470 回答
0

对于 CakePHP 3.5,这对我有用:

$event->setResult($this->render('anotherview'));

这也将使您能够使用调试器。exit;当我使用该语句时,CakePHP 调试器停止工作。

于 2020-10-03T14:58:12.513 回答