我正在使用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来做同样事情的最佳方法?
请指教。
答案 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));
}