引言
Laravel秉持MVC的設計理念,在V = view 中放置檢視相關的內容。特別是 blade 模板引擎帶來了很強大的解析方式。
與傳統的PHP與HTML寫作一團方式不容,Blade 使用特定的語法結構,將變數資料渲染到檢視內。
那麼如何優雅地在檢視檔案裡定義一個PHP變數呢?
學習時間比如宣告一個變數,你完全可以混雜PHP標籤的內容:
<?php $old_section = "whatever"; ?>這非常不優雅,不是嗎?但是,像下面這樣:
{{ $old_section = "whatever" }}會直接輸出變數值。這不是想要的結果。在laravel blade 模板裡,你應該使用下面的標籤
@php $i = 1 @endphp這樣把PHP書寫的內容,使用特定的識別符號隔開,就達到目的了。當然你還可以使用簡寫:
@php ($i = 1)這與上方的結構塊寫法輸出結果相同。
換一種思路,如果版本較早,不能支援php結構塊,我們可以使用 if 語句塊實現,在條件語句內使用賦值寫法。如下:
@if ($variable = 'any data, be it string, variable or OOP') @endif注意在判斷語句內,使用了賦值語句,那麼變數 $variable 就被宣告且可外部訪問了。
這也是曲線救國的一種方式吧。
困難的辦法laravel系統提供了模板的擴充套件使用系統不具備的標籤。我們使用 ServiceProvider 註冊一個先的 BaldeServiceProvider,在其中新增 Blade 模板的擴充套件方法。
首先建立檔案
app/Providers/BladeServiceProvider.php然後新增下面的程式碼:
我們使用自定義的標籤 define 用於宣告變數,使用 preg_replace 函式將其替換為 php 寫法的字串。
然後在 config/app.php 檔案內載入此 ServiceProvider 檔案:
最後需要手動清理已經生成的巨大的 compile 檔案:
php artisan clear-compiled
這樣就可以在程式裡使用自定義的blade擴充套件標籤了。
寫在最後本文提供了3種方法用於在laravel模板檔案內定義全域性變數。我們強烈推薦第三種,使用“服務提供者”載入 Blade::extend 的載入規則。這很符合laravel的程式設計風格。
Happy coding :-)