Skip to main content

前言

Blade 是 Laravel 內建的、簡潔卻強大的模板引擎。 與部分 PHP 模板引擎不同,Blade 不會限制在模板中使用原生 PHP 程式碼。 所有 Blade 模板都會被編譯為 PHP 並快取,因此 Blade 幾乎不會對應用程式帶來額外負擔。 Blade 模板檔案的副檔名為 .blade.php,通常存放於 resources/views 目錄。

Blade 編譯流程

以下顯示 .blade.php 檔案如何被轉為 HTML 回應。一旦編譯完成的檔案會被快取,同一模板第 2 次以後的請求便會跳過編譯。

顯示資料

要顯示傳入 Blade 視圖的資料,可用雙大括號包住變數。
Blade 的 {{ }} 會自動透過 PHP 的 htmlspecialchars 函式進行處理以防止 XSS 攻擊。
除了變數,也可以顯示 PHP 函式的結果。

顯示未跳脫的資料

若希望略過跳脫,可使用 {!! !!} 語法。
在顯示使用者輸入的資料時,請務必使用 {{ }} 讓自動跳脫生效。 對不受信任的輸入使用 {!! !!} 會導致 XSS 漏洞。

與 JavaScript 框架共存

若 JavaScript 框架也使用大括號,可用 @ 符號讓 Blade 略過該處的渲染。
此時 Blade 會移除 @,但 {{ name }} 會原樣傳送到瀏覽器,由 JavaScript 框架負責渲染。
想比較以 Blade 為主,或擴展到 Livewire、Inertia 時的選擇,請參閱前端

Blade 指令

條件判斷(if 敘述)

使用 @unless 可撰寫「若不是……」的條件。
若要確認變數是否已定義且非 null,可用 @isset@empty

認證指令

Switch 敘述

迴圈

Blade 提供處理迴圈的便利指令。
在迴圈內可使用 @break@continue 控制迴圈。
也可以將條件直接傳給指令。

迴圈變數

@foreach 迴圈中,可透過 $loop 變數取得關於迴圈的資訊。

註解

Blade 註解不會出現在渲染後的頁面中。

版面

使用元件的版面

Laravel 建議使用 Blade 元件來建構版面。 首先建立版面元件。
接著建立使用該版面的視圖。

使用模板繼承的版面

作為傳統做法,也可以使用 @extends@section@yield 進行模板繼承。 父版面的定義:
子視圖繼承版面:
使用 @parent 可保留父版面 @section 的內容並在其後追加。

子視圖引入

使用 @include 指令可將某個 Blade 視圖嵌入其他視圖中。 父視圖中可用的所有變數,在被引入的視圖中也可以使用。
也可以額外傳入變數。

表單的 CSRF 保護

web 路由檔中,送出 POSTPUTPATCHDELETE 請求的 HTML 表單,請務必加上 @csrf 指令。
若要從表單送出 PUTPATCHDELETE 請求,可使用 @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 將視圖作為可重用零件嵌入。
最後修改於 2026年8月2日