Створення адаптивних компонентних мереж за допомогою системи подій #[On] у Laravel Livewire

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 06 вересня, 2025
Laravel Livewire надає потужну архітектуру на основі подій, яка дозволяє компонентам взаємодіяти без тісної прив'язки. Чи готові ви дізнатися, як ефективно використовувати цю нову функцію для створення динамічних веб-додатків? Читайте далі, щоб дізнатися, як реалізувати інтуїтивно зрозумілі інтерфейси з функцією обробки подій у Livewire

Створення взаємопов’язаних компонентів, які безперешкодно спілкуються між собою, є ключовим для сучасних веб-додатків. Laravel Livewire пропонує розвинуту архітектуру на основі подій через атрибут #[On] та систему диспетчеризації, що дозволяє компонентам взаємодіяти без тісного зв’язку

Атрибут #[On] замінює традиційну властивість $listeners, забезпечуючи більш елегантний підхід до обробки подій. Компоненти можуть слухати конкретні події та реагувати на них, створюючи динамічні інтерфейси, які відповідають на зміни в додатку

use Livewire\Component;
use Livewire\Attributes\On;

class NotificationBell extends Component
{
    public $unreadCount = 0;

    #[On('notification-added')]
    public function incrementCount()
    {
        $this->unreadCount++;
    }

    public function render()
    {
        return view('livewire.notification-bell');
    }
}

Події активуються за допомогою методу dispatch з будь-якого компонента вашого додатку. Це створює патерн публікації-підписки, в якому компоненти залишаються незалежними, але координують свою поведінку

class MessageSender extends Component
{
    public function sendAlert($message)
    {
        Notification::create(['message' => $message, 'user_id' => auth()->id()]);

        $this->dispatch('notification-added', message: $message);
    }

    public function render()
    {
        return view('livewire.message-sender');
    }
}

Система підтримує кілька слухачів подій для кожного компонента та дозволяє використовувати динамічні назви подій на основі властивостей компонента. Також можна націлюватися на конкретні компоненти за допомогою методу dispatch()->to() для більш точної комунікації

#[On('user-{userId}-updated')]
public function refreshUserData($userData)
{
    $this->userData = $userData;
}

Уявіть проектний менеджмент дашборд, на якому різні компоненти повинні залишатися синхронізованими. Дошка завдань, трекер прогресу та сповіщення команди потребують оновлень, коли відбуваються зміни у ключових етапах проекту, але функціонують незалежно один від одного

class ProjectDashboard extends Component
{
    public $activeProjects = [];
    public $completedTasks = 0;
    public $teamAlerts = [];

    #[On('task-completed')]
    public function updateProgress($taskData)
    {
        $this->completedTasks++;
        $this->teamAlerts[] = "Завдання '{$taskData['title']}' виконано {$taskData['assignee']}";
    }

    #[On('project-milestone-reached')]
    public function addMilestoneAlert($projectId, $milestone)
    {
        $project = Project::find($projectId);
        $this->teamAlerts[] = "🎉 {$project->name} досягнуто: {$milestone}";

        $this->dispatch('send-team-email',
            subject: "Досягнення ключового етапу",
            project: $project->name,
            milestone: $milestone
        );
    }

    #[On('new-project-added')]
    public function refreshProjectList()
    {
        $this->activeProjects = Project::where('status', 'active')->get();
    }

    public function render()
    {
        return view('livewire.project-dashboard');
    }
}

Цей компонент дашборда демонструє, як можна обробляти кілька типів подій в одному компоненті. Коли завдання виконуються, ключові етапи досягаються чи додаються нові проекти, дашборд автоматично оновлює свій вигляд і може викликати додаткові дії, такі як надсилання сповіщень команді

Система подій безперешкодно інтегрується з Laravel Echo для реального мовлення, слухачами подій JavaScript та компонентами Alpine.js. Події можуть бути ініційовані як на серверній частині з допомогою PHP, так і на клієнтській частині за допомогою JavaScript або безпосередньо з шаблонів Blade за допомогою допоміжного $dispatch

Популярні

Logomark Logotype

Простий пакет RabbitMQ для Laravel

Вам цікаво дізнатися, як спростити інтеграцію RabbitMQ у вашому Laravel-додатку? У нашій статті ми розглянемо пакет Simple RabbitMQ, який дозволяє легко налаштувати багатозʼєднання, публікувати повідомлення та обробляти черги за допомогою простого синтаксису. Читайте далі, щоб дізнатися більше!

Logomark Logotype

Усе, що нам відомо про Livewire 4

Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення