快速入门
为了开始您的 Livewire 之旅,我们将创建一个简单的“计数器”组件并在浏览器中呈现它。此示例是初次体验 Livewire 的绝佳方式,因为它以最简单的方式展示了 Livewire 的“实时性”。
先决条件
在开始之前,请确保您已安装以下内容
- Laravel 版本 10 或更高版本
- PHP 版本 8.1 或更高版本
安装 Livewire
从 Laravel 应用程序的根目录运行以下 Composer 命令
composer require livewire/livewire
如果您正在使用的应用程序已经安装了 AlpineJS,则需要将其删除才能使 Livewire 正常工作;否则,Alpine 将被加载两次,Livewire 将无法运行。例如,如果您安装了 Laravel Breeze“Blade with Alpine”入门工具包,则需要从 resources/js/app.js
中删除 Alpine。
创建 Livewire 组件
Livewire 提供了一个便捷的 Artisan 命令来快速生成新组件。运行以下命令以生成新的 Counter
组件
php artisan make:livewire counter
此命令将在您的项目中生成两个新文件
-
app/Livewire/Counter.php
-
resources/views/livewire/counter.blade.php
编写类
打开 app/Livewire/Counter.php
并用以下内容替换其内容
<?php namespace App\Livewire; use Livewire\Component; class Counter extends Component{ public $count = 1; public function increment() { $this->count++; } public function decrement() { $this->count--; } public function render() { return view('livewire.counter'); }}
以下是上述代码的简要说明
-
public $count = 1;
— 声明一个名为$count
的公共属性,其初始值为1
。 -
public function increment()
— 声明一个名为increment()
的公共方法,该方法每次调用时都会增加$count
属性。此类公共方法可以通过多种方式从浏览器触发,包括当用户单击按钮时。 -
public function render()
— 声明一个render()
方法,该方法返回一个 Blade 视图。此 Blade 视图将包含我们组件的 HTML 模板。
编写视图
打开 resources/views/livewire/counter.blade.php
文件并用以下内容替换其内容
<div> <h1>{{ $count }}</h1> <button wire:click="increment">+</button> <button wire:click="decrement">-</button></div>
此代码将显示 $count
属性的值以及两个按钮,分别增加和减少 $count
属性。
为了使 Livewire 正常工作,组件必须只有一个元素作为其根元素。如果检测到多个根元素,则会引发异常。建议使用 <div>
元素,如示例所示。HTML 注释被视为单独的元素,应放在根元素内。呈现全页组件时,布局文件的命名插槽可以放在根元素之外。这些将在组件呈现之前被移除。
为组件注册路由
在 Laravel 应用程序中打开 routes/web.php
文件并添加以下代码
use App\Livewire\Counter; Route::get('/counter', Counter::class);
现在,我们的 counter 组件被分配给 /counter
路由,这样当用户访问应用程序中的 /counter
端点时,浏览器将呈现此组件。
创建模板布局
在浏览器中访问 /counter
之前,我们需要一个 HTML 布局,以便在其中渲染我们的组件。默认情况下,Livewire 将自动查找名为 resources/views/components/layouts/app.blade.php
的布局文件
如果该文件不存在,你可以通过运行以下命令创建它
php artisan livewire:layout
此命令将生成一个名为 resources/views/components/layouts/app.blade.php
的文件,其内容如下
<!DOCTYPE html><html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{{ $title ?? 'Page Title' }}</title> </head> <body> {{ $slot }} </body></html>
counter 组件将渲染在上面模板中的 $slot
变量的位置。
你可能已经注意到 Livewire 没有提供任何 JavaScript 或 CSS 资产。这是因为 Livewire 3 及更高版本会自动注入它需要的任何前端资产。
测试它
我们的组件类和模板就绪后,我们的组件就可以测试了!
在浏览器中访问 /counter
,你应该会看到屏幕上显示一个数字,以及两个用于增加和减少数字的按钮。
点击其中一个按钮后,你会注意到计数实时更新,而无需重新加载页面。这就是 Livewire 的魔力:完全用 PHP 编写的动态前端应用程序。
我们只是粗略地了解了 Livewire 的功能。继续阅读文档以了解 Livewire 提供的所有功能。