引言
從控制器內組裝好的資料渲染到檢視檔案,上一章我們演示了簡單的單變數數值訪問。
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');
然後在控制器內實現該方法:
我們組裝了一個字串陣列,並且傳送到檢視。在檢視內使用迴圈結構將 $events 的值遍歷輸出。
模板內程式碼如下:
訪問該路由地址之後,生成的HTML頁面內容如下:
當然了,對於陣列我們免不了使用判空的條件,模板語法如下:
判斷條件
有了迴圈結構,判斷條件也不能少。特別是類似RBAC的許可權訪問控制,那些使用者對於哪些選單,
哪些路由地址,擁有許可權;而哪些使用者沒有,這就需要if條件判斷。
我們對上一節的示例程式碼新增條件判斷,如果陣列 $events 的元素內含有 Laravel 字元,
則追加輸出 (sweet framework)。
直接上程式碼:
注意模板內使用 @if ... @endif
包裹判斷條件主體內容。在瀏覽器內訪問路由,可以看到輸出的HTML內容如下:
對於多層巢狀的 if ... elseif ... else
這樣的語法,模板也是支援的,所能形成的判斷邏輯也更為複雜,
上述程式碼我們再加點“料”:
執行結束後生成的HTML內容如下:
寫在最後
本文我們介紹了MVC模式中的V部分,在檢視內使用了簡單的條件判斷和迴圈語法。
在業務程式碼中,哪些邏輯放在C內完成,哪些放在V內完成,需要我們靈活使用。
總而言之一個宗旨,V檢視內不能放太多邏輯程式碼。
Happy coding :-)
我是@程式設計師小助手,專注程式設計知識,圈子動態的IT領域原創作者
本作品採用《CC 協議》,轉載必須註明作者和本文連結