想象一下,我有一个非常复杂的应用程序。我有一个调用characters.ctp
的控制器。这里为所有"字符"。
在characters.ctp
内,我调用monsters
元素。它会打印出一个怪物并向我提供从数据库中检索到的怪物的相关信息。现在在monsters
元素中,我想为invertebrates
创建另一个元素,因为它们非常复杂,需要大量新的视图元素和CSS。
invertebrates
不包含从控制器通过monster
继承的$this->set()
变量的范围。如何将所有变量发送到元素的子元素?我正在使用蛋糕2.8.4。
答案 0 :(得分:1)
set()
方法在characters
控制器中完成所有数据库工作后,您应该在monster
内部通过使用View::set重新设置monster
所携带的变量来执行一些控制器作业:
# /app/View/Elements/monster.ctp
//if you want to set variables one by one
$this->set('varForInvertebrates', $varForMonster);
//if you want to set an array of variables
$this->set(array(
'var1' => $var1,
'var2' => $var2,
...
));
如果您需要计算monster
中可用的数据以便在invertebrates
中使用它,您可以使用CakeObject::requestAction显式调用控制器:
# /app/View/Elements/monster.ctp
// if the controller returns a variable
$this->set('varForInvertebrates', $this->requestAction('controller/method/param1/param2'));
// if the controller returns an array of variables
$this->set($this->requestAction('controller/method/param1/param2'));