2017-08-04 158 views
0

似乎有兩種最常用的方式將數據傳遞給視圖,雖然有幾個問題要求區分這兩個函數,但我沒有看到一個解釋它們是否可互換的單個計算器回答,它使用了更多經常和如果它們不可互換,在什麼情況下使用這兩種功能。緊湊()和()可互換嗎?

+1

兩者都沒有關係。 compact()是php函數,並且()是laravel函數。他們不可互換,閱讀文檔http://php.net/manual/en/function.compact.php –

+0

@ZaheerAttar我明白,一個是PHP函數,另一個是Laravel函數,但他們似乎用於對於像我這樣的新手程序員來說,情況相同,情況相同,所以我想知道在什麼情況下使用哪個函數。 – Robert

+0

'compact'是一個PHP函數,它可以執行任何userland函數實現可能模擬的事情。所以,'與'不可能做'compact'的同一件事,所以它們不能互換。 – deceze

回答

7

compact()是一個標準的PHP函數,它從變量列表構建數組,將變量名稱指定爲數組元素鍵,將變量值指定爲數組元素值。它可以用作將變量傳遞給Laravel視圖的便捷方式,因爲Laravel的View::make()將接受鍵/值對數組的第二個參數。 您可以輕鬆指定一組鍵/值對,但PHP的compact()提供了一個簡單的方法來完成此操作。

$x = "Hello"; 
$y = "world"; 
$view = View::make('myViewName', compact('x', 'y'); 

相同

$x = "Hello"; 
$y = "world"; 
$view = View::make('myViewName', ['x' => $x, 'y' => $y]); 

compact()您的變量必須已經存在。指定數組手動更靈活,因爲你可以做

$x = "Hello"; 
$y = "world"; 
$view = View::make('myViewName', ['salutation' => $x, 'addressTo' => $y]); 

這將使變量稱爲$salutation$addressTo刀片模板中,即使你原來的變量只是叫$x$y

,或者你甚至可以做

$view = View::make('myViewName', ['salutation' => "Hello", 'addressTo' => "world"]); 

with()是Laravel特有的,(在此查看建築上下文中),您可以指定單個鍵和值將被傳遞到視圖。主要區別在於,您可以將鍵名指定爲任何您想要的(與將自己構建的數組用作View::make()的第二個參數的方式大致相同),並且該值可以是函數調用的直接返回值。

$x = "Hello"; 
$y = "world"; 
$view = View::make('myViewName')->with('x', $x)->with('y', $y); 

$view = View::make('myViewName')->with('x', "Hello")->with('y', "World"); 

$view = View::make('myViewName') 
    ->with('salutation', "Hello") 
    ->with('addressTo', "World"); 

它基本上是與傳遞用戶構建的陣列View::make(),但可以說是更可讀

在這兩種情況下,該鍵/值對(無論通過第二個參數指定爲View::make()或使用with())在刀片模板內提取,密鑰用於元素名稱。

這兩種方法甚至可以一起使用。