跳转到主要内容

什么是 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 的资源。

第一个组件

有专门用来生成 Livewire 组件的 Artisan 命令。先做一个简单的计数器。
这条命令会生成一个单文件组件 resources/views/components/⚡counter.blade.php
文件名里的 ⚡ 用来一眼识别出 Livewire 组件,在编辑器里更醒目。不需要的话可以在配置里关掉。
把生成的文件按下面的方式改写:
在 Blade 模板中通过普通的 Blade 组件语法嵌入它:
每次点击按钮,页面不用刷新就能更新计数。wire:click 就是取代 JavaScript,直接调用 PHP 方法的机制。

属性与动作

属性 —— wire:model

wire:model 指令可以把输入元素和组件的属性做双向绑定。
默认情况下,wire:model 只在有动作发生时(比如表单提交)才和服务器同步。想每次输入都同步,加 .live 修饰符。

动作 —— wire:clickwire:submit

wire:click 把点击事件、wire:submit 把表单提交事件绑定到方法上。

实时校验

Livewire 4 可以通过 #[Validate] 属性直接为属性定义验证规则。
#[Validate] 标注的属性每次更新时会自动执行校验。结合 wire:model.live.blur 可以做出“失焦瞬间显示错误信息”的实时校验体验。
$this->validate() 会在表单提交时一次性校验所有属性。推荐的做法是把它和 #[Validate] 的自动校验组合成两级校验。

生命周期钩子

Livewire 组件有几个生命周期钩子。

mount() —— 初始化

mount() 用于组件初始化,类似构造函数。

updated() —— 属性变更后的处理

想在属性更新后加一段逻辑时用 updated()。想只针对特定属性时,把属性名放到方法名里。
每次输入都会自动转成小写。

与 Laravel 的集成

直接使用 Eloquent 模型

Livewire 的属性可以直接持有 Eloquent 模型。

表单对象

复杂表单可以拆到表单对象里,让组件更简洁。
在组件里用这个表单对象。

总结

Livewire 特别适合的用例: 只要你用过 Blade,今天就能开始用 Livewire。它最大的优势是:不必学习 JavaScript 框架就能构建交互式 UI。 需要接近 SPA 的复杂交互时 Inertia.js 更合适;但表单、后台、数据表格这类场景下,Livewire 通常能以更简洁的方式搞定。先从一个小组件开始试试吧。

Livewire 官方文档

Livewire 的完整功能(文件上传、分页、测试等)请查看官方文档。
最后修改于 2026年7月18日