2011-03-29 40 views
13

我知道compact()是一個標準的PHP函數。 set()是一個特定於蛋糕的方法。CakePHP澄清使用set()和compact()在一起。只會工作瓦特/緊湊()

我正在運行一個簡單的測試,將值傳遞給使用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'); 

回答

37

按照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); 

都達到同樣的事情。

+0

Tokes,謝謝澄清。我對這些合作的確切功能有點不確定。 – OldWest 2011-03-29 23:32:34

+0

+1,但網頁鏈接得到了「502錯誤網關」。 – Sithu 2013-10-08 04:42:28

+0

當我們有更多數量的變量時,像compact這樣的任何差異都很快。設置? – AnNaMaLaI 2015-06-23 03:36:24

2

compact返回一個數組。所以顯然設置是檢查它的參數,如果它是一個數組,它知道它是從緊湊的。如果不是,它期望另一個參數,變量的值。

+0

謝謝,Shoto :) – OldWest 2011-03-29 23:31:55