4

我想知道如何在 cakePHP 中使用加载页面时始终调用的函数?

这个例子更精确:

我有我的主页:index.ctp 我还有另一个页面:profil.ctp

我想要的是,当我尝试访问 profil.ctp 时,如果我没有登录,它会自动将我重定向到 index.ctp 页面。

我已经做了什么:

用户控制器:

function index() {
    if (!empty($this->data))
        $this->Session->write(array('User' => array('connected' => true)));
}

配置文件控制器:

function index() {
  if (!$this->Session->read('connected'))
    $this->redirect(array('controller' => 'users', 'action' => 'index'));
}

问题是我不想将此代码添加到每个页面以及所有控制器的每个功能中。

有任何想法吗 ?

问候。

4

2 回答 2

10

将代码放入您AppController.php的 s beforeFilter()

如果您beforeFilter在其他控制器中使用,请确保parent在其他代码之前调用。

public function beforeFilter() {
    parent::beforeFilter();
    // your other code
}

在每个控制器中,beforeFilter()都会调用 ,然后触发 AppController (parent) beforeFilter()

于 2012-12-11T17:13:54.180 回答
3

把代码放在你的AppController beforeFilter()

应用控制器:

public function beforeFilter()
{
  //call your code here
}

beforeFilter()在您的控制器中,仅当您需要运行每次调用特定控制器中的操作时必须执行的特定代码时才覆盖该函数。

一些例子:

用户控制器:

UsersController extends AppController
{
  public function beforeFilter()
  {
    parent::beforeFilter();

    //add some code here that must be run before each UsersController's action
  }

  ...

}

日志控制器:

如果您在使用 LogsController 的操作之前不需要调用任何特定代码,请不要添加任何beforeFilter()功能。beforeFilter()由于对象继承,将使用AppController 。

LogsController extends AppController
{
  //no need for a beforeFilter() here ! 
  //AppController's beforeFilter() will be used automatically

  ...

}
于 2012-12-11T18:14:50.620 回答