1

我正在使用 cakePHP 1.26。
在控制器中,我得到了一个功能:

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

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

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

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

4

2 回答 2

2

一般来说,控制器的每个方法只与它的视图(即ctp根据控制器名称命名并根据方法名称命名的文件夹中的文件)进行通信。如果此控制器被命名,则其方法中的Tests变量将仅可用于标识为 的文件。set()testing()ctpviews/tests/testing.ctp

要使该信息在其他地方可用,您要么必须保留它——就像你在会话中所做的那样——要么通过“外部”方法(如requestAction().

作为起点,只需了解控制器的给定方法直接与一个且仅一个视图对齐(同样,存在过度简化的风险)。

于 2010-07-21T16:35:11.293 回答
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));
}
于 2010-07-22T01:06:07.010 回答