1.1. Быстрый старт
Чтобы начать ваше знакомство с Livewire, мы создадим простой компонент "счётчик" и отобразим его в браузере. Этот пример — отличный способ впервые познакомиться с Livewire, так как он демонстрирует интерактивность Livewire самым простым образом.
1. Требования
Прежде чем начать, убедитесь, что у вас установлено следующее:
- Laravel версии 10 или новее
- PHP версии 8.1 или новее
2. Установка Livewire
Из корневой директории вашего Laravel-приложения выполните следующую команду Composer:
composer require livewire/livewire
Если в вашем приложении уже установлен AlpineJS, вам нужно его удалить, чтобы Livewire работал корректно;
в противном случае Alpine будет загружен дважды, и Livewire не сможет функционировать. Например, если вы
установили стартовый набор Laravel Breeze "Blade с Alpine", вам нужно удалить Alpine из файла
resources/js/app.js.
3. Создание компонента Livewire
Livewire предоставляет удобную Artisan-команду для быстрого создания новых компонентов. Выполните следующую
команду, чтобы создать новый компонент Counter:
php artisan make:livewire counter
Эта команда создаст два новых файла в вашем проекте:
-
app/Livewire/Counter.php -
resources/views/livewire/counter.blade.php
4. Написание класса
Откройте файл 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-шаблон. Этот шаблон будет содержать HTML-код для нашего компонента.
5. Написание представления
Откройте файл 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-комментарии
считаются отдельными элементами и должны быть размещены внутри корневого элемента. При рендеринге компонентов, занимающих всю страницу, именованные
слоты для файла макета могут быть размещены вне корневого элемента. Эти слоты удаляются до того, как
компонент будет отрендерен.
6. Регистрация маршрута для компонента
Откройте файл routes/web.php в вашем Laravel-приложении и добавьте следующий код:
use App\Livewire\Counter; Route::get('/counter', Counter::class);
Теперь наш компонент counter привязан к маршруту /counter, так что, когда пользователь
посещает конечную точку /counter в вашем приложении, этот компонент будет отрендерен в браузере.
7. Создание шаблона макета
Прежде чем вы сможете посетить /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>
Компонент счётчик будет отрендерен на месте переменной $slot в приведённом выше шаблоне.
Вы могли заметить, что Livewire не предоставляет JavaScript или CSS-ресурсы. Это потому, что начиная с версии Livewire 3, все необходимые фронтенд-ресурсы автоматически внедряются.
8. Проверка работы
Теперь, когда класс компонента и шаблоны готовы, можно приступить к тестированию компонента!
Перейдите по адресу /counter в браузере, и вы должны увидеть число на экране с двумя кнопками для увеличения и уменьшения этого числа.
После нажатия на одну из кнопок вы заметите, что счётчик обновляется в реальном времени без перезагрузки страницы. В этом и заключается магия Livewire: динамичные фронтенд-приложения, написанные полностью на PHP.
Мы лишь поверхностно коснулись того, на что способен Livewire. Продолжайте изучать документацию, чтобы узнать обо всех возможностях Livewire.