2016-03-28 14 views
2

綜觀Laravel代碼我發現他們正在使用以下方法通過可變從「路線」到「觀點」:Laravel的「withVariableName」如何工作?

$arraysan = ['mike','robert','john']; **//Variable to be passed** 
return view('home')->withArraysan($arraysan); **//Variable passed with** name "withArraysan" 

在他們調用名爲withArraysan功能不存在上述的語法。

有人可以解釋它是如何在Laravel中處理的?

回答

0
$arraysan = ['mike', 'robert', 'john']; // Variable to be passed 
return view('home')->with('AnyVariable', $arraysan); 

試試這個!這將工作。

還要檢查在home.blade.php,

<?php 
    print_r($AnyVariable);die; 
?> 
+0

感謝您的回覆。我想你在laravel中發佈另一個選項來實現從「路由」傳遞給「視圖」的變量,但是我想知道的是他們如何調用一個名爲「withArraysan」的函數,該函數存在以及它們如何無誤地執行它? –

3

現在一段時間,PHP已經具備了magic methods概念 - 這些都是特殊的方法,可以被添加到一個類來攔截方法調用該做的不存在。

Laravel Views實現了__call - 然後它攔截對對象的未定義方法的調用,並傳遞被調用方法的名稱以及參數。通過這種方式,View對象可以看到withArraysan調用開始with並調用具體方法with,將第二部分Arraysan作爲第一個參數,將參數作爲第二部分傳遞給withArraysan

2

如果我有你的問題,然後在Laravel他們有一類View用魔術方法__call來處理上述功能,該功能的代碼是這樣如下

public function __call($method, $parameters) 
{ 
    if (Str::startsWith($method, 'with')) { 
     return $this->with(Str::snake(substr($method, 4)), $parameters[0]); 
    } 

    throw new BadMethodCallException("Method [$method] does not exist on view."); 
} 

,你可以找到這個在

your_project_folder/vendor/laravel/framework/src/Illuminate/View/View.php