如何在CakePHP 2.0中的其他控制器动作中从AppController beforeFilter获取变量

时间:2015-06-29 05:54:52

标签: cakephp cakephp-2.0

我在AppController里面的User表上查询了如下

<?php

class AppController extends Controller {

    public function beforeFilter() {

        function beforeFilter() {
            parent::beforeFilter();
            if ($this->Session->read('Auth.User.id')) {
                $userLoginInfo = $this->User->findByUserId($this->Session->read('Auth.User.id'));
                $this->set('userLoginInfo', !empty($userLoginInfo) ? $userLoginInfo : NULL);
            }
        }

    }

}
?>

$userLoginInfo在所有ctp个文件中都可用,但我也希望在所有其他控制器操作中访问它。

3 个答案:

答案 0 :(得分:4)

现在您将此代码放在AppController

function beforeFilter(){
$this->set(‘accesstest’ , ‘abc’);
}

我们必须在其他控制器文件中使用它来说anotherController.php

然后我们将使用$ this-&gt; viewVars。

这里我们将使用

$test  = $this->viewVars[‘accesstest’];
$this->set('test',$test);

答案 1 :(得分:3)

如果想为所有视图设置变量,

Your own answer适用,但这不是您在问题中提出的要求。

如果您正确地扩展AppController,那么您可以创建AppController类的属性,然后可以从任何扩展它的控制器访问该属性: -

class AppController extends Controller {
    public $accesstest = 'abc';
}

然后在任何扩展AppController的控制器中,您可以使用: -

$test = $this->accesstest;
echo $test; // 'abc'

但是,如果您想共享一个您想要从所有可以更改的控制器访问的变量,并且您希望更改记住,那么请使用会话: -

$this->Session->write('accesstest', 'abc');
$test = $this->Session->read('accesstest');

答案 2 :(得分:1)

$userLoginInfo =  $this->viewVars['userLoginInfo'];