Skip to main content

什麼是 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 應用根目錄執行以下指令。
Laravel 的自動套件探索已啟用,因此不需要額外設定。

建立版面檔

作為全頁元件使用時需要版面檔。可用以下 Artisan 指令產生。
會產生 resources/views/layouts/app.blade.php
@livewireStyles@livewireScripts 會自動載入 Livewire 與 Alpine.js 的資源。

第一個元件

有一個 Artisan 指令可用來產生 Livewire 元件。我們來做個簡單的計數器。
此指令會產生 resources/views/components/⚡counter.blade.php 單檔元件。
檔名的 ⚡ 用來一眼識別 Livewire 元件,提升在編輯器內的辨識度。若不需要可透過設定關閉。
將產生的檔案編輯為:
要在 Blade 模板嵌入此元件,使用一般 Blade 元件語法。
每次點按鈕都會在不重新整理下更新計數。wire:click 讓 PHP 方法取代 JavaScript 被呼叫。

屬性與動作

屬性 — wire:model

wire:model 指令能雙向綁定輸入元素與元件屬性。
預設 wire:model 只有在動作被執行(例如表單送出)時才與伺服器同步。若想每次輸入都同步,加上 .live 修飾詞。

動作 — wire:clickwire: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 的完整功能(檔案上傳、分頁、測試等)請參考官方文件。
最後修改於 2026年8月2日