什么是 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 的资源。
第一个组件
有专门用来生成 Livewire 组件的 Artisan 命令。先做一个简单的计数器。resources/views/components/⚡counter.blade.php。
把生成的文件按下面的方式改写:
wire:click 就是取代 JavaScript,直接调用 PHP 方法的机制。
属性与动作
属性 —— wire:model
wire:model 指令可以把输入元素和组件的属性做双向绑定。
wire:model 只在有动作发生时(比如表单提交)才和服务器同步。想每次输入都同步,加 .live 修饰符。
动作 —— wire:click、wire: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 的完整功能(文件上传、分页、测试等)请查看官方文档。