如何将变量从app_controller传递给布局

时间:2011-02-01 17:25:53

标签: cakephp layout cakephp-1.3

我是CakePhp的新手,我正在尝试将app_controller.php中的变量传递给我的default.ctp。

我在app_controller.php中试过这个:

function beforeFilter(){
$this->set('my_var', $my_var_to_pass);
}

但是当我在default.ctp中执行此操作时:

echo $my_var;

我明白了:

Notice (8): Undefined variable: my_var [APP\views\layouts\default.ctp, line 72]

我正在使用Cake 1.3!

一些想法?

谢谢!

4 个答案:

答案 0 :(得分:3)

我能想到的唯一一件事就是你没有像你说的那样使用1.3,而事实上1.2确实有代码将some_var转换为someVar所以要么尝试

$this->set('myvar', $my_var_to_pass); 
echo $myvar 
// or 
$this->set('my_var', $my_var_to_pass); 
// and 
echo $myVar

答案 1 :(得分:2)

将vars从app__controller传递到任何布局的好方法是使用beforeFilter()中的app_controller函数。

这与Auth使用的功能相同:

function beforeFilter() {
    $this->set('your_var', 'Data for the var');}

答案 2 :(得分:1)

SQuat,您使用的是哪个版本的CakePHP?正如dogmatic69指出的那样,行为在1.2到1.3之间存在差异。您可以使用debug($ this-> viewVars)获取视图可用的所有变量的列表。

在1.2中,viewVars中的键是camelized()...在1.3中不再是这种情况。

答案 3 :(得分:-3)

要从控制器将'my_var'传递给布局,您需要在变量名的末尾附加'_for_layout'。控制器中的代码如下所示:

$this->set('my_var_for_layout', $my_var_to_pass);

在您的布局文件中,您可以访问从控制器传递的变量,如下所示:

echo $my_var_for_layout;