3分鐘短文:Laravel模板,也支援一般程式語言的語法結構了

ragus發表於2020-09-26

引言

從控制器內組裝好的資料渲染到檢視檔案,上一章我們演示了簡單的單變數數值訪問。

laravel的模板系統,還提供了很多常用的程式語言的語法結構,其實是PHP的變體,

可以讓程式設計人員更好地掌控HTML輸出。

圖片

本期就來說說模板內的程式結構的高階用法。

轉義 or 不轉義

首先是單變數的值,我們在控制器內有可能並沒有為該變數賦值,或者並未宣告和傳遞該變數,

在模板內直接引用,會丟擲 變數未定義 的異常,造成無法渲染。

laravel給了一個簡潔的判空的方式,就是 or 語法,很直觀,程式碼用起來如下:

Welcome, {{ $name or 'Laravel Member' }}!

我們上一章介紹過,使用雙大括號會在模板解析的時候,生成下面的PHP程式碼:

<?php echo $variable; ?>

這對常規變數無害,可是對於非法的操作,比如是使用者輸入的內容,直接展示的話,有可能造成檔案和資料庫等等的風險,

所以對變數要做一次轉義,將其內容原封不動地用字串的方式展現出來,這樣做其實非常有必要。

對變數結果進行轉義,使用如下的語法:

{!! 'My list <script>alert("spam spam spam!")</script>' !!}

大家看到了,如果上面的內容直接輸出到HTML,就會觸發js的注入。可是,使用轉義之後,就是原文輸出,不會被瀏覽器解析。

迴圈結構

通常動態資料由陣列方式構成,我們不可能在模板內一個一個地書寫,那樣就造成了重複勞動。

模板內要是有迴圈判斷結構,效果就好多了,寫一次,無論來多少資料,都只需寫一次結構。

laravel模板是支援迴圈結構的,我們下面演示一下。首先從路由的宣告開始:

Route::get('events', 'EventsController@index');

然後在控制器內實現該方法:

pic

我們組裝了一個字串陣列,並且傳送到檢視。在檢視內使用迴圈結構將 $events 的值遍歷輸出。

模板內程式碼如下:

pic

訪問該路由地址之後,生成的HTML頁面內容如下:

pic

當然了,對於陣列我們免不了使用判空的條件,模板語法如下:

pic

判斷條件

有了迴圈結構,判斷條件也不能少。特別是類似RBAC的許可權訪問控制,那些使用者對於哪些選單,

哪些路由地址,擁有許可權;而哪些使用者沒有,這就需要if條件判斷。

我們對上一節的示例程式碼新增條件判斷,如果陣列 $events 的元素內含有 Laravel 字元,

則追加輸出 (sweet framework)

直接上程式碼:

pic

注意模板內使用 @if ... @endif 包裹判斷條件主體內容。在瀏覽器內訪問路由,可以看到輸出的HTML內容如下:

pic

對於多層巢狀的 if ... elseif ... else 這樣的語法,模板也是支援的,所能形成的判斷邏輯也更為複雜,

上述程式碼我們再加點“料”:

pic

執行結束後生成的HTML內容如下:

pic

寫在最後

本文我們介紹了MVC模式中的V部分,在檢視內使用了簡單的條件判斷和迴圈語法。

在業務程式碼中,哪些邏輯放在C內完成,哪些放在V內完成,需要我們靈活使用。

總而言之一個宗旨,V檢視內不能放太多邏輯程式碼。

Happy coding :-)

我是@程式設計師小助手,專注程式設計知識,圈子動態的IT領域原創作者

本作品採用《CC 協議》,轉載必須註明作者和本文連結
write-less-do-more-make-you-out-of-door

相關文章