Quay lại

Event và Listener Trong Laravel, Khi Nào Thì Nên Dùng? Chuyên mục PHP và Laravel    2024-05-20    11 Lượt xem    5 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Event và Listener Trong Laravel, Khi Nào Thì Nên Dùng?

Trong Laravel, Event và Listener là các thành phần của hệ thống sự kiện của framework. Chúng được sử dụng để xử lý các sự kiện cụ thể trong ứng dụng của bạn một cách tách biệt và có tổ chức. Dưới đây là cách chúng hoạt động và những trường hợp sử dụng phổ biến:

Event

Event là các lớp mô tả một hành động hoặc sự kiện cụ thể xảy ra trong ứng dụng. Ví dụ, một sự kiện có thể là một người dùng đăng ký, một bài viết mới được tạo, hoặc một đơn hàng được hoàn thành.

Listener

Listener là các lớp được gán vào các sự kiện cụ thể. Khi một sự kiện xảy ra, các listener được gán vào sự kiện đó sẽ được gọi để thực hiện các hành động mong muốn.

Cách hoạt động

  1. Định nghĩa sự kiện (Event):

    • Bạn tạo một lớp sự kiện bằng lệnh Artisan hoặc tự tạo lớp thủ công.
    • Ví dụ:
      php artisan make:event UserRegistered​
    • Lớp sự kiện UserRegistered có thể trông như sau:
      <?php
      
      namespace App\Events;
      
      use Illuminate\Foundation\Events\Dispatchable;
      use Illuminate\Queue\SerializesModels;
      use App\Models\User;
      
      class UserRegistered
      {
          use Dispatchable, SerializesModels;
      
          public $user;
      
          public function __construct(User $user)
          {
              $this->user = $user;
          }
      }​
  2. Định nghĩa listener (Listener):

    • Bạn tạo một lớp listener bằng lệnh Artisan hoặc tự tạo lớp thủ công.
    • Ví dụ:
      php artisan make:listener SendWelcomeEmail​
    • Lớp listener SendWelcomeEmail có thể trông như sau:
      <?php
      
      namespace App\Listeners;
      
      use App\Events\UserRegistered;
      use Illuminate\Contracts\Queue\ShouldQueue;
      use Illuminate\Queue\InteractsWithQueue;
      use App\Mail\WelcomeMail;
      use Mail;
      
      class SendWelcomeEmail
      {
          public function __construct()
          {
              //
          }
      
          public function handle(UserRegistered $event)
          {
              Mail::to($event->user->email)->send(new WelcomeMail($event->user));
          }
      }​
  3. Đăng ký event và listener:

    • Đăng ký sự kiện và listener của bạn trong file EventServiceProvider.
    • Ví dụ:
      <?php
      
      namespace App\Providers;
      
      use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
      use Illuminate\Support\Facades\Event;
      
      class EventServiceProvider extends ServiceProvider
      {
          protected $listen = [
              'App\Events\UserRegistered' => [
                  'App\Listeners\SendWelcomeEmail',
              ],
          ];
      
          public function boot()
          {
              parent::boot();
          }
      }​
  4. Kích hoạt sự kiện:

    • Bạn kích hoạt sự kiện bằng cách sử dụng hàm event() hoặc Event::dispatch().
    • Ví dụ:
      use App\Events\UserRegistered;
      use App\Models\User;
      
      $user = User::find(1);
      event(new UserRegistered($user));​

Các trường hợp sử dụng phổ biến

  1. Gửi Email:

    • Gửi email xác nhận hoặc chào mừng khi người dùng đăng ký mới (nó sẽ được thực hiện ngay lập tức và không được đẩy vào queue.)
  2. Ghi nhật ký (Logging):

    • Ghi lại các hành động của người dùng, như đăng nhập, đăng ký, hoặc thực hiện một hành động quan trọng.
  3. Cập nhật số liệu thống kê:

    • Cập nhật số liệu thống kê khi có một hành động cụ thể, chẳng hạn như một bài viết được xem hoặc một sản phẩm được mua.
  4. Xử lý nền (Background Processing):

    • Sử dụng event và listener để xử lý các tác vụ nền như gửi thông báo hoặc cập nhật dữ liệu mà không làm gián đoạn quy trình chính.

Ưu điểm của việc sử dụng Event và Listener

  • Decoupling Code: Giúp tách rời mã nguồn, làm cho mã dễ bảo trì và mở rộng.
  • Reusable: Listener có thể được tái sử dụng cho nhiều sự kiện khác nhau.
  • Asynchronous Processing: Có thể xử lý các tác vụ bất đồng bộ thông qua các listener.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday