CakePHP:将所有变量发送到另一个元素中的元素

时间:2016-09-20 18:51:45

标签: cakephp cakephp-2.0

想象一下,我有一个非常复杂的应用程序。我有一个调用characters.ctp的控制器。这里为所有"字符"。

完成了大量的数据库工作

characters.ctp内,我调用monsters元素。它会打印出一个怪物并向我提供从数据库中检索到的怪物的相关信息。现在在monsters元素中,我想为invertebrates创建另一个元素,因为它们非常复杂,需要大量新的视图元素和CSS。

invertebrates不包含从控制器通过monster继承的$this->set()变量的范围。如何将所有变量发送到元素的子元素?我正在使用蛋糕2.8.4。

1 个答案:

答案 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'));