关于使用set()和compact()的CakePHP澄清。只能使用compact()

时间:2011-03-29 19:16:31

标签: model-view-controller cakephp view set

我知道compact()是一个标准的php函数。而set()是一种特定于蛋糕的方法。

我正在运行一个简单的测试,将一个值传递给使用ajax(我的控制器中的用户render())生成的视图,并且它只将值从控制器传递给视图,如果我的设置是这样的话:

$variable_name_to_pass = "Passing to the view using set() can compact()";

$this->set(compact('variable_name_to_pass'));

从阅读手册开始,看起来set()应该与w / out compact一起工作。

任何人都可以解释为什么set()不会单独工作?像

$this->set('variable_name_to_pass');

2 个答案:

答案 0 :(得分:40)

根据CakePHP API

  

参数:

     

需要混合$one

     

字符串或数据数组。

     

混合$two 可选 NULL

     

$one中的值是一个字符串(然后作为键)。如果$one关联数组,则不使用,否则将作为$one键的值。

compact函数返回一个关联数组,通过获取输入数组中指定的名称,将它们用作键,并获取这些名称引用的变量值并使其成为值来构建。例如:

$fred = 'Fred Flinstone';
$barney = 'Barney Rubble';
$names = compact('fred', 'barney');

// $names == array('fred' => 'Fred Flinstone', 'barney' => 'Barney Rubble')

因此,当您将compactset结合使用时,您将使用set函数的单参数形式,方法是将其传递给关联数组键值对。

如果您只想在视图上设置一个变量,并且想要使用单个参数表单,则必须以相同的方式调用set

$variable_to_pass = 'Fred';
$this->set(compact('variable_to_pass'));

否则,可以使用set的两个参数形式:

$variable_to_pass = 'Fred';
$this->set('variable_to_pass', $variable_to_pass);

两者都达到了同样的目的。

答案 1 :(得分:3)

Compact返回一个数组。所以,显然设置是检查它的参数,如果它是一个数组。它知道它来自紧凑型。如果不是,它需要另一个参数,变量值。