前言
Blade 是 Laravel 內建的、簡潔卻強大的模板引擎。 與部分 PHP 模板引擎不同,Blade 不會限制在模板中使用原生 PHP 程式碼。 所有 Blade 模板都會被編譯為 PHP 並快取,因此 Blade 幾乎不會對應用程式帶來額外負擔。 Blade 模板檔案的副檔名為.blade.php,通常存放於 resources/views 目錄。
Blade 編譯流程
以下顯示.blade.php 檔案如何被轉為 HTML 回應。一旦編譯完成的檔案會被快取,同一模板第 2 次以後的請求便會跳過編譯。
顯示資料
要顯示傳入 Blade 視圖的資料,可用雙大括號包住變數。Blade 的
{{ }} 會自動透過 PHP 的 htmlspecialchars 函式進行處理以防止 XSS 攻擊。顯示未跳脫的資料
若希望略過跳脫,可使用{!! !!} 語法。
與 JavaScript 框架共存
若 JavaScript 框架也使用大括號,可用@ 符號讓 Blade 略過該處的渲染。
@,但 {{ name }} 會原樣傳送到瀏覽器,由 JavaScript 框架負責渲染。
想比較以 Blade 為主,或擴展到 Livewire、Inertia 時的選擇,請參閱前端。
Blade 指令
條件判斷(if 敘述)
@unless 可撰寫「若不是……」的條件。
@isset 與 @empty。
認證指令
Switch 敘述
迴圈
Blade 提供處理迴圈的便利指令。@break 與 @continue 控制迴圈。
迴圈變數
在@foreach 迴圈中,可透過 $loop 變數取得關於迴圈的資訊。
註解
Blade 註解不會出現在渲染後的頁面中。版面
使用元件的版面
Laravel 建議使用 Blade 元件來建構版面。 首先建立版面元件。使用模板繼承的版面
作為傳統做法,也可以使用@extends、@section、@yield 進行模板繼承。
父版面的定義:
使用
@parent 可保留父版面 @section 的內容並在其後追加。子視圖引入
使用@include 指令可將某個 Blade 視圖嵌入其他視圖中。
父視圖中可用的所有變數,在被引入的視圖中也可以使用。
表單的 CSRF 保護
在web 路由檔中,送出 POST、PUT、PATCH、DELETE 請求的 HTML 表單,請務必加上 @csrf 指令。
PUT、PATCH、DELETE 請求,可使用 @method 指令。
關於 Origin 驗證與包含
X-CSRF-TOKEN / X-XSRF-TOKEN 標頭在內的正式 CSRF 對策,請參閱 CSRF 保護。總結
以下整理 Blade 模板引擎的主要功能。顯示資料
顯示資料
{{ $variable }} 為附帶跳脫的顯示;{!! $variable !!} 為未跳脫的顯示。條件判斷
條件判斷
@if、@elseif、@else、@endif、@unless、@isset、@empty、@auth、@guest。迴圈
迴圈
@for、@foreach、@forelse、@while 與利用 $loop 變數的控制。版面
版面
元件式(
<x-layout> 與 {{ $slot }})或模板繼承(@extends、@section、@yield)。子視圖
子視圖
使用
@include 將視圖作為可重用零件嵌入。