Old*_*est 15 model-view-controller cakephp view set
我知道compact()是一个标准的PHP函数.而set()是一种特定于蛋糕的方法.
我运行一个值传递给使用Ajax生成的视图(用户呈现()在我的控制器)的一个简单的测试,和,如果我的设置是这样,因此仅通过从控制器到该视图的值:
$variable_name_to_pass = "Passing to the view using set() can compact()";
$this->set(compact('variable_name_to_pass'));
Run Code Online (Sandbox Code Playgroud)
从阅读手册,看来set()应该与w/out compact一起工作.
任何人都可以解释为什么set()不会单独工作?喜欢
$this->set('variable_name_to_pass');
Run Code Online (Sandbox Code Playgroud)
小智 43
根据CakePHP API:
参数:
$one需要混合字符串或数据数组.
混合
$two可选 NULLcase
$one中的值是一个字符串(然后作为键).未使用if$one是关联数组,否则用作$one键的值.
该compact函数返回一个关联数组,通过获取输入数组中指定的名称,将它们用作键,并获取这些名称引用的变量的值并使其成为值来构建.例如:
$fred = 'Fred Flinstone';
$barney = 'Barney Rubble';
$names = compact('fred', 'barney');
// $names == array('fred' => 'Fred Flinstone', 'barney' => 'Barney Rubble')
Run Code Online (Sandbox Code Playgroud)
因此,当您compact与函数一起使用时set,您将使用set函数的单个参数形式,通过传递一个键值对的关联数组.
如果您只想在视图上设置一个变量,并且想要使用单个参数表单,则必须set以相同的方式调用:
$variable_to_pass = 'Fred';
$this->set(compact('variable_to_pass'));
Run Code Online (Sandbox Code Playgroud)
否则,set可以使用两个参数形式:
$variable_to_pass = 'Fred';
$this->set('variable_to_pass', $variable_to_pass);
Run Code Online (Sandbox Code Playgroud)
两者都达到了同样的目的.