Laravel - Xử lý Sự kiện

Xin chào các pháp sư Laravel tương lai! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới kỳ diệu của Xử lý Sự kiện trong Laravel. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ dẫn dắt bạn từng bước trong hành trình này, giống như tôi đã làm với hàng trăm sinh viên trong những năm dạy học của mình. Vậy, hãy lấy một cốc đồ uống yêu thích của bạn, và cùng nhau bắt đầu cuộc phiêu lưu thú vị này nhé!

Laravel - Event Handling

Sự kiện là gì trong Laravel?

Hãy tưởng tượng bạn đang tham gia một bữa tiệc (tất nhiên là bữa tiệc mã code rồi!). Khi một điều gì đó quan trọng xảy ra - ví dụ như khi bánh đến - mọi người đều rất vui mừng. Trong Laravel, sự kiện là những khoảnh khắc thú vị trong ứng dụng của bạn. Đó là những sự kiện đặc biệt mà ứng dụng của bạn quan tâm.

Ví dụ, khi một người dùng đăng ký trên trang web của bạn, đó là một sự kiện. Khi một đơn hàng được đặt, đó là một sự kiện khác. Sự kiện giúp chúng ta giữ mã code tổ chức và cho phép các phần khác nhau của ứng dụng phản ứng với những khoảnh khắc quan trọng này.

Tại sao sử dụng Sự kiện?

  1. Tách biệt: Sự kiện giúp tách riêng các phần khác nhau của ứng dụng. Nó giống như có các đội làm việc riêng biệt - mỗi đội không cần biết tất cả về công việc của các đội khác.

  2. Đ灵活: Bạn có thể dễ dàng thêm mới các phản ứng cho sự kiện mà không cần thay đổi mã hiện có.

  3. Rõ ràng: Sự kiện giúp mã code dễ hiểu hơn. Nó rõ ràng hơn về việc đang xảy ra điều gì và khi nào.

Tạo Sự kiện Đầu Tiên

Hãy cùng nhau tạo sự kiện đầu tiên. Chúng ta sẽ tạo một sự kiện xảy ra khi một người dùng mới đăng ký. Dưới đây là cách chúng ta làm:

php artisan make:event NewUserRegistered

Lệnh này tạo một tệp mới trong app/Events có tên NewUserRegistered.php. Hãy xem bên trong:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class NewUserRegistered
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $user;

    public function __construct($user)
    {
        $this->user = $user;
    }

    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

Đừng để tất cả mã này làm bạn lo lắng! Nó giống như một công thức - chúng ta sẽ qua từng thành phần:

  • Các câu lệnh use ở trên là như việc nhập các công cụ chúng ta có thể cần.
  • Lớp sự kiện NewUserRegistered là nơi xảy ra phép màu.
  • Thuộc tính $user sẽ giữ thông tin về người dùng mới.
  • Phương thức __construct được gọi khi chúng ta tạo sự kiện, và nó lưu trữ thông tin người dùng.

Khởi tạo (Gửi) một Sự kiện

Bây giờ chúng ta đã có sự kiện, hãy sử dụng nó! Chúng ta sẽ gửi sự kiện này khi một người dùng mới đăng ký. Dưới đây là cách chúng ta có thể làm trong một controller:

use App\Events\NewUserRegistered;

public function register(Request $request)
{
    // ... logic đăng ký người dùng ...

    $user = User::create($request->all());

    event(new NewUserRegistered($user));

    return redirect('/welcome');
}

Ở đây, sau khi chúng ta tạo một người dùng mới, chúng ta gửi sự kiện bằng cách sử dụng hàm event(). Nó giống như bắn pháo hoa để chúc mừng người dùng mới!

Lắng nghe Sự kiện

Bây giờ, hãy tạo một người lắng nghe sẽ phản ứng với sự kiện của chúng ta. Hãy tưởng tượng người này là người phân phát mũ party khi bánh đến.

Đầu tiên, hãy tạo một người lắng nghe:

php artisan make:listener SendWelcomeEmail --event=NewUserRegistered

Lệnh này tạo một tệp mới trong app/Listeners có tên SendWelcomeEmail.php. Hãy xem bên trong:

<?php

namespace App\Listeners;

use App\Events\NewUserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;

class SendWelcomeEmail
{
    public function handle(NewUserRegistered $event)
    {
        // Truy cập người dùng bằng $event->user
        // Logic gửi email chào mừng ở đây
    }
}

Phương thức handle là nơi chúng ta đặt mã sẽ chạy khi sự kiện xảy ra. Trong trường hợp này, chúng ta sẽ đặt logic gửi email chào mừng.

Đăng ký Người lắng nghe Sự kiện

Để kết nối sự kiện với người lắng nghe, chúng ta cần đăng ký chúng. Mở app/Providers/EventServiceProvider.php và thêm này vào mảng $listen:

protected $listen = [
    NewUserRegistered::class => [
        SendWelcomeEmail::class,
    ],
];

Điều này告诉 Laravel, "Hey, khi NewUserRegistered xảy ra, hãy chạy SendWelcomeEmail!"

Người Đăng ký Sự kiện

Đôi khi, bạn có thể muốn một lớp xử lý nhiều sự kiện. Đó là khi người đăng ký sự kiện ra vào. Họ giống như người tổ chức tiệc chịu trách nhiệm nhiều khía cạnh của tiệc.

Dưới đây là cách tạo một người đăng ký sự kiện:

php artisan make:listener UserEventSubscriber

Sau đó, trong lớp UserEventSubscriber:

<?php

namespace App\Listeners;

class UserEventSubscriber
{
    public function handleUserRegistered($event) {}

    public function handleUserLoggedIn($event) {}

    public function subscribe($events)
    {
        $events->listen(
            'App\Events\NewUserRegistered',
            'App\Listeners\UserEventSubscriber@handleUserRegistered'
        );

        $events->listen(
            'App\Events\UserLoggedIn',
            'App\Listeners\UserEventSubscriber@handleUserLoggedIn'
        );
    }
}

Để đăng ký người đăng ký này, thêm nó vào thuộc tính $subscribe trong EventServiceProvider:

protected $subscribe = [
    'App\Listeners\UserEventSubscriber',
];

Người lắng nghe Sự kiện Đặt hàng

Nếu người lắng nghe của bạn đang thực hiện một công việc tốn thời gian (như gửi email), bạn có thể muốn đặt hàng để không làm chậm ứng dụng của bạn. Nó giống như nói với ai đó, "Hey, bạn có thể làm công việc này sau khi bạn không bận nữa không?"

Để làm cho người lắng nghe có thể đặt hàng, hãy triển khai giao diện ShouldQueue:

use Illuminate\Contracts\Queue\ShouldQueue;

class SendWelcomeEmail implements ShouldQueue
{
    // ...
}

Bây giờ, Laravel sẽ tự động đặt hàng người lắng nghe này!

Bảng các Phương thức Sự kiện

Dưới đây là bảng các phương thức chính chúng ta sử dụng với sự kiện:

Phương thức Mô tả
event() Gửi một sự kiện
listen() Đăng ký một người lắng nghe sự kiện
subscribe() Đăng ký một người đăng ký sự kiện
dispatch() Một cách khác để gửi sự kiện
broadcast() Phát sóng một sự kiện (cho ứng dụng thời gian thực)

Và thế là xong, các sinh viên yêu quý của tôi! Chúng ta đã cùng nhau đi qua vùng đất Xử lý Sự kiện của Laravel. Nhớ rằng, thực hành làm nên hoàn hảo, vì vậy đừng ngần ngại thử nghiệm các khái niệm này trong các dự án của riêng bạn. Ai biết đâu? Bạn có thể tổ chức buổi tiệc mã code tốt nhất ever với kỹ năng xử lý sự kiện mới học được của bạn!

Chúc các bạn lập mã vui vẻ, và hy vọng sự kiện của bạn luôn được xử lý một cách duyên dáng và tinh tế!

Credits: Image by storyset