我知道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');
答案 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')
因此,当您将compact
与set
结合使用时,您将使用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返回一个数组。所以,显然设置是检查它的参数,如果它是一个数组。它知道它来自紧凑型。如果不是,它需要另一个参数,变量值。