什麼是 Livewire
過去要在 Laravel 中做動態 UI,通常得結合 Vue.js 或 React 等 JavaScript 框架,或自己寫 AJAX 請求。 Livewire 是為此而生的 Laravel 套件。只用 PHP 與 Blade 就能建構響應式 UI。表單即時驗證、即時搜尋、計數器等傳統上需 JavaScript 的功能,全部可以用 PHP 實作。Livewire 4 需要 Laravel 10 以上、PHP 8.1 以上。目前最新版本為 Livewire 4。
運作機制概觀
Livewire 元件是伺服器端 PHP 類別與 Blade 模板的組合。使用者點擊按鈕或在表單輸入時,Livewire 在幕後送出 AJAX 請求執行 PHP,只把變更的部分反映到頁面。開發者可以完全不用意識這個機制,只寫 PHP。安裝
在 Laravel 應用根目錄執行以下指令。建立版面檔
作為全頁元件使用時需要版面檔。可用以下 Artisan 指令產生。resources/views/layouts/app.blade.php。
@livewireStyles 與 @livewireScripts 會自動載入 Livewire 與 Alpine.js 的資源。
第一個元件
有一個 Artisan 指令可用來產生 Livewire 元件。我們來做個簡單的計數器。resources/views/components/⚡counter.blade.php 單檔元件。
將產生的檔案編輯為:
wire:click 讓 PHP 方法取代 JavaScript 被呼叫。
屬性與動作
屬性 — wire:model
wire:model 指令能雙向綁定輸入元素與元件屬性。
wire:model 只有在動作被執行(例如表單送出)時才與伺服器同步。若想每次輸入都同步,加上 .live 修飾詞。
動作 — wire:click、wire:submit
wire:click 綁定 click 事件、wire:submit 綁定表單送出事件。
即時驗證
Livewire 4 可用#[Validate] 屬性直接在屬性上定義驗證規則。
#[Validate] 的屬性會在每次更新時自動驗證。搭配 wire:model.live.blur 就能達到「失去焦點瞬間顯示錯誤訊息」的即時驗證體驗。
$this->validate() 會在表單送出時把所有屬性一次驗證。搭配 #[Validate] 的自動驗證做成兩階段是推薦模式。生命週期 hook
Livewire 元件有多個生命週期 hook。mount() — 初始化
mount() 用於元件初始化,作為建構子的替代。
updated() — 屬性變更後處理
若要在屬性更新後插入處理,可使用 updated()。若要限定特定屬性,將名稱含入方法名。
與 Laravel 整合
活用 Eloquent 模型
Livewire 屬性可直接持有 Eloquent 模型。表單物件
複雜表單可抽成 Form 物件,讓元件保持簡潔。總結
以下整理 Livewire 特別適合的情境。
只要「用過 Blade」的 Laravel 工程師,今天就能開始使用 Livewire。最大的優勢是不需 JavaScript 框架學習成本就能實現互動式 UI。
需要 SPA 級的高複雜度互動時 Inertia.js 較適合;但表單、管理介面、資料表這類用途,Livewire 通常實作起來更簡潔。不妨從一個小元件開始試試。
Livewire 官方文件
Livewire 的完整功能(檔案上傳、分頁、測試等)請參考官方文件。