2017-10-21 114 views
0

我有參數傳遞給自定義指令的問題,我寫道:傳遞參數自定義指令

這是我經過: @renderblocks($設備類型,$ subBlocksIds,$ allBlocks)

首先是隻是一個字符串,第二個數組數組,第三個模型的Eloquent數組。

當我嘗試使用的參數以及後來我遇到一個問題:

Blade::directive('renderblocks', function ($expression) { 
     list($deviceType, $subBlocksIds, $allBlocks) = explode(', ', $expression); 
     dd($deviceType); 

它打印這個 - >「$設備類型」就這樣,而不是實際的字符串變量持有。其他參數相同,我如何將參數傳遞給自定義刀片指令並在內部使用它們?

回答

0

刀片將所有內容都轉換爲php tags,並將它們替換爲您稱爲directive的文件。您正在嘗試查看AppServiceProvider中的變量內容,該變量對variable一無所知,但僅將其視爲字符串。

在您的視圖中調用renderblocks將其替換爲您從函數返回的內容。例如

Blade::directive('renderblocks', function ($expression) { 
    list($deviceType, $subBlocksIds, $allBlocks) = explode(', ', $expression); 
    return "<?php echo {$deviceType} ?>"; 
}); 

替換爲<?php echo $deviceType ?>renderblocks每次調用。這不顯示任何錯誤或顯示爲字符串,因爲該文件中存在變量$deviceType。但是您將它看作ServiceProvider文件中的一個字符串,因爲它們是作爲字符串發送的,而不是真實的變量。

你可以使用發送到ServiceProvidervariables,laravel會發揮它的魔力並將返回的結果發送到視圖。

例如,

Blade::directive('addAge', function ($age) { 
    $age= 999; 
    return "<?php echo {$age} ?>"; 
}); 

調用@addAge(1)仍顯示999,因爲它是在ServiceProvider改變,即使它作爲一個字符串發送