关于cakePHP中Set()组件的问题

时间:2010-07-21 16:06:02

标签: cakephp cakephp-1.2

我正在使用cakePHP 1.26 在控制器中,我有一个功能:

function testing(){
$userinfo=$this->Test->findAllByuser_id();
$this->set('userinfo',$userinfo);
}

我发现包含一些数组数据的变量“userinfo”只能在testing.ctp中访问。
为了使变量“userinfo”可以被其他.ctp文件访问,我使用了这个帮助器:

 $this->Session->write('userinfo', $userinfo);     

然而,我不确定为什么Set()函数定义的变量不能被其他.ctp文件访问,但会话可以。
是否有通过使用其他方法而不是使用Session来做同样事情的最佳方法? 请指教。

2 个答案:

答案 0 :(得分:2)

一般来说,控制器的每个方法只与其视图通信(即,ctp文件位于根据控制器名称命名的文件夹中,并根据方法名称命名)。如果此控制器名为Tests,则其set()方法中的变量testing()仅可用于标识为ctp的{​​{1}}文件。

要在其他地方提供该信息,您必须保留它 - 正如您在会话中所做的那样 - 或通过views/tests/testing.ctp等“外部”方法执行控制器。

作为一个起点,只需了解控制器的给定方法直接与一个视图对齐(同样,有可能过于简单化)。

答案 1 :(得分:1)

您也可以将该功能封装在模型中。

在用户模型中

function getUserinfo($id)
{
    return $this->findByUser_id($id);
}

然后在初始化用户模型的其他控制器中调用它

/*in another controller*/
function someAction($uid)
{
    $this->User = ClassRegistry::init("User"); // or you can use `$uses = array('User');`
    $this->set("userinfo",$this->User->getUserInfo($uid));
}