LARAVEL TUTORIALS
10 thủ thuật Lavavel giúp bạn code nhanh hơn! Routing trong Laravel, cách tạo Route và sử dung AZ Tạo Middleware trong Laravel đơn giản trong 5 phút Xử lý Authentication và Authorization trong Laravel Event và listener trong Laravel, cách tạo và quản lý cơ bản nhất Tạo broadcast event trong Laravel dễ dàng trong 10 phút Xử lý Form Validation trong Laravel từ A - Z Cách tạo Session và cookie trong Laravel dễ dàng như ăn cháo Top 10 Package Lavavel thường dùng trong dự án Laravel Sử dụng Task trong Laravel đơn giản trong 10 phút. Cách tạo API trong Laravel đơn giản chỉ trong 5 phút Cách tạo job trong Laravel sao cho hiệu quả? Queues trong Laravel, dùng để xử lý các tác vụ mất nhiều thời gian Cache trong Laravel, các loại Cache thường dùng trong Laravel Redis trong Laravel, biết cách sử dung Redis Laravel trong 5 phút Sử dụng Memcache trong Laravel tăng tốc độ truy cập website Unit Test trong Laravel, thực hành tạo testing Laravel A-Z 10 thủ thuật tối ưu quá trình Testing trong Laravel Top 7 thư viện Testing Laravel được dùng nhiều nhất Testbench và Orchestra Testbench trong Laravel, kiểm thử Laravel dễ dàng Cách dùng Browser Testing (Laravel Dusk) trong Laravel Cách tạo test case cho Controller trong Laravel Cách tạo test case cho Model trong Laravel Cách tạo Database Testing trong Laravel Real-time web applications là gì ? Tầm quan trọng trong Laravel Laravel WebSockets, các bước tạo WebSockets trong Laravel Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime Cách dùng Long polling trong Laravel để cải thiện trải nghiệm Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ Cách dùng Event Sourcing trong Laravel Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản Sử dụng Service Container trong Laravel dễ dàng Cách xử lý đa ngôn ngữ trong Laravel dễ dàng Tìm hiểu và sử dụng Service Provider trong Laravel Facades là gì? Cách dùng Facades trong Laravel Cách sử dụng Email Verification trong Laravel Cách dùng URL Generation trong Larevel Cách sử dụng Error Handling trong Laravel Cách dùng Encryption và decryption trong Laravel Cách sử dụng Relationships trong Laravel Bài 01: Laravel là gì? Hướng dẫn cài đặt laravel trên windows Sử dụng Event trong Laravel Một cách quản lý filter trong Laravel
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Event và listener trong Laravel, cách tạo và quản lý cơ bản nhất

Trong Laravel, Event và Listener là hai khái niệm quan trọng trong việc quản lý sự kiện và xử lý chúng trong ứng dụng web. Event là một sự kiện xảy ra trong hệ thống, ví dụ như khi người dùng đăng nhập thành công hoặc khi có một đơn hàng mới được tạo. Listener là một đoạn mã được thực thi khi một sự kiện được kích hoạt.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo và quản lý Event và Listener trong Laravel. Đầu tiên, chúng ta sẽ tìm hiểu về cách tạo Event và Listener, sau đó sẽ đi vào chi tiết cách sử dụng chúng để xử lý các sự kiện trong Laravel. Bài viết sẽ bao gồm các ví dụ cụ thể và hướng dẫn cách sử dụng các công cụ và tính năng trong Laravel để quản lý Event và Listener.

I. Event trong Laravel là gì ?

Event là một thành phần quan trọng của hệ thống sự kiện (event system). Event (hay còn gọi là sự kiện) được sử dụng để thông báo về một hành động nào đó trong ứng dụng và cho phép các phần khác của ứng dụng đăng ký và phản ứng với sự kiện này.

Ví dụ, khi một người dùng đăng ký tài khoản trên trang web của bạn, bạn có thể tạo một sự kiện "UserRegistered" để đăng ký người dùng mới này. Các thành phần khác trong ứng dụng của bạn có thể đăng ký với sự kiện này và thực hiện một số hành động sau khi sự kiện được kích hoạt, ví dụ như gửi email xác nhận, lưu thông tin người dùng vào cơ sở dữ liệu, v.v.

Bài viết này được đăng tại [free tuts .net]

Event cũng được sử dụng để giảm sự phụ thuộc giữa các thành phần trong ứng dụng của bạn. Thay vì phải gọi trực tiếp các thành phần khác trong ứng dụng, các thành phần này có thể đăng ký với sự kiện và phản ứng với nó khi sự kiện được kích hoạt.

Dưới đây là một ví dụ về sử dụng Event trong Laravel:

Ta có một sự kiện là "UserRegistered" để xử lý khi người dùng đăng ký tài khoản mới:

Đầu tiên, ta cần đăng ký sự kiện trong tệp EventServiceProvider.php bằng cách thêm mã sau:

protected $listen = [
    'App\Events\UserRegistered' => [
        'App\Listeners\SendWelcomeEmail',
    ],
];

Tiếp theo, ta cần tạo một lớp sự kiện UserRegistered trong thư mục app/Events với mã như sau:

namespace App\Events;

use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UserRegistered
{
    use Dispatchable, SerializesModels;

    public $user;

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

Lớp sự kiện này chứa thông tin về người dùng được đăng ký.

Sau đó, ta cần tạo một lớp SendWelcomeEmail trong thư mục app/Listeners để xử lý sự kiện UserRegistered:

namespace App\Listeners;

use App\Events\UserRegistered;
use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;

class SendWelcomeEmail
{
    public function handle(UserRegistered $event)
    {
        Mail::to($event->user->email)->send(new WelcomeEmail($event->user));
    }
}

Lớp này gửi email chào mừng cho người dùng đăng ký mới.

Cuối cùng, ta cần phát ra sự kiện UserRegistered khi có người dùng đăng ký mới bằng cách thêm mã sau vào phương thức xử lý đăng ký trong bộ điều khiển:

use App\Events\UserRegistered;
use App\Models\User;

public function register(Request $request)
{
    // Xử lý đăng ký người dùng
    $user = new User([
        'name' => $request->name,
        'email' => $request->email,
        'password' => bcrypt($request->password),
    ]);
    $user->save();

    // Phát ra sự kiện UserRegistered
    event(new UserRegistered($user));

    // Chuyển hướng đến trang đăng nhập
    return redirect('/login');
}

Như vậy, khi có người dùng đăng ký tài khoản mới, sự kiện UserRegistered sẽ được phát ra, và lớp SendWelcomeEmail sẽ được gọi để gửi email chào mừng đến người dùng mới đăng ký.

Trong Laravel, Event được quản lý bởi Service Container của framework. Service Container cung cấp một cơ chế để đăng ký các listener với event tương ứng, và khi sự kiện được kích hoạt, Service Container sẽ tự động gọi các listener tương ứng và xử lý sự kiện.

II. Tạo một Event trong Laravel

Bước 1: Tạo sự kiện

Để tạo sự kiện, hãy chạy lệnh make:event trong terminal của bạn:

php artisan make:event OrderShipped

Lệnh trên sẽ tạo ra một lớp sự kiện mới có tên OrderShipped. Trong lớp này, bạn có thể định nghĩa các thuộc tính và phương thức để sử dụng trong các listener của sự kiện này.

Ví dụ:

namespace App\Events;

use App\Models\Order;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class OrderShipped
{
    use Dispatchable, SerializesModels;

    public $order;

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

Lớp sự kiện trên đại diện cho việc một đơn hàng đã được gửi đi. Nó có một thuộc tính $order để lưu trữ thông tin về đơn hàng và một constructor để khởi tạo đối tượng.

Bước 2: Tạo listener

Sau khi bạn đã tạo sự kiện, bạn có thể tạo một listener để xử lý sự kiện đó. Chạy lệnh make:listener để tạo lớp listener:

php artisan make:listener SendShipmentNotification --event=OrderShipped

Lệnh trên sẽ tạo ra một lớp listener mới với tên SendShipmentNotification. Trong lớp này, bạn có thể định nghĩa phương thức handle để xử lý sự kiện.

Ví dụ:

namespace App\Listeners;

use App\Events\OrderShipped;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendShipmentNotification implements ShouldQueue
{
    public function handle(OrderShipped $event)
    {
        // Gửi email thông báo đơn hàng đã được gửi đi
    }
}

Listener trên được sử dụng để gửi email thông báo cho khách hàng khi đơn hàng của họ đã được gửi đi.

Bước 3: Đăng ký listener với sự kiện

Cuối cùng, bạn cần đăng ký listener với sự kiện để xử lý sự kiện. Bạn có thể đăng ký listener trong file EventServiceProvider.php.

Ví dụ:

protected $listen = [
    OrderShipped::class => [
        SendShipmentNotification::class,
    ],
];

Trong ví dụ trên Listener SendShipmentNotification đã được đăng ký với sự kiện OrderShipped. Khi sự kiện OrderShipped được kích hoạt (thông qua phương thức $event->dispatch()), listener SendShipmentNotification sẽ được gọi và phương thức handle trong listener này sẽ được thực thi.

Bạn có thể kích hoạt sự kiện OrderShipped bằng cách sử dụng phương thức dispatch như sau:

use App\Events\OrderShipped;
use App\Models\Order;

$order = Order::find(1);
OrderShipped::dispatch($order);

Khi phương thức dispatch được gọi, sự kiện OrderShipped sẽ được kích hoạt và các listener đăng ký với sự kiện này sẽ được thực thi.

Nếu bạn muốn xử lý sự kiện bất đồng bộ, bạn có thể sử dụng interface ShouldQueue trong lớp sự kiện và Laravel sẽ tự động xử lý sự kiện bằng một hàng đợi, ví dụ:

class OrderShipped implements ShouldQueue
{
    // ...
}

Trong ví dụ này, lớp sự kiện OrderShipped được thiết lập để xử lý bất đồng bộ.

Đó là cách bạn tạo và quản lý sự kiện và listener trong Laravel. Bạn có thể sử dụng Event để theo dõi và phản hồi các hoạt động của ứng dụng của bạn, tăng tính bảo mật và dễ dàng bảo trì ứng dụng của bạn.

Bước 4: Kích hoạt sự kiện

Sử dụng phương thức event() để kích hoạt sự kiện và truyền các tham số cần thiết.

Ví dụ:

$user = Auth::user();
event(new UserLoggedIn($user));

Trong đoạn mã trên, Auth::user() được sử dụng để lấy thông tin về người dùng đăng nhập. Sau đó, sự kiện UserLoggedIn được kích hoạt và truyền vào thông tin về người dùng đăng nhập.

Sau khi sự kiện được kích hoạt, lớp listener LogUserLogin sẽ được gọi để xử lý sự kiện. Trong ví dụ này, lớp listener sẽ ghi log về việc người dùng đăng nhập vào hệ thống.

III. Listener trong Laravel

Listener trong Laravel là một lớp được sử dụng để xử lý các sự kiện được kích hoạt trong ứng dụng. Listener đóng vai trò như một bộ lắng nghe cho các sự kiện và thực hiện các hành động tương ứng khi sự kiện được kích hoạt.

Một listener thường bao gồm một phương thức handle() để xử lý sự kiện. Phương thức handle() nhận vào đối số là một đối tượng sự kiện và sử dụng các thuộc tính của đối tượng sự kiện để thực hiện các hành động tương ứng.

Ví dụ, trong một ứng dụng Laravel, bạn muốn ghi log lại khi có người dùng đăng nhập vào hệ thống. Để làm điều đó, bạn có thể tạo một lớp sự kiện UserLoggedIn để đại diện cho sự kiện đăng nhập thành công. Sau đó, bạn có thể tạo một listener LogUserLogin để ghi log về việc đăng nhập của người dùng.

// UserLoggedIn.php
namespace App\Events;

use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UserLoggedIn
{
    use Dispatchable, SerializesModels;

    public $user;

    public function __construct($user)
    {
        $this->user = $user;
    }
}
// LogUserLogin.php
namespace App\Listeners;

use App\Events\UserLoggedIn;
use Illuminate\Support\Facades\Log;

class LogUserLogin
{
    public function handle(UserLoggedIn $event)
    {
        $user = $event->user;
        Log::info("User {$user->name} logged in");
    }
}

Trong ví dụ này, listener LogUserLogin chứa phương thức handle() để xử lý sự kiện UserLoggedIn. Phương thức handle() nhận vào một đối tượng sự kiện UserLoggedIn và sử dụng thuộc tính user của đối tượng sự kiện để ghi log về việc đăng nhập của người dùng.

Để kích hoạt sự kiện, bạn có thể sử dụng phương thức event() trong Laravel. Ví dụ:

$user = Auth::user();
event(new UserLoggedIn($user));

Sau khi sự kiện được kích hoạt, listener LogUserLogin sẽ được gọi để xử lý sự kiện. Trong ví dụ này, lớp listener sẽ ghi log về việc người dùng đăng nhập vào hệ thống.

Mối liên hệ giữa Event và Listener trong Laravel

Trong Laravel, Event và Listener có mối liên hệ chặt chẽ với nhau.

Event là một sự kiện trong ứng dụng, ví dụ như khi người dùng đăng ký thành công tài khoản, bạn có thể tạo một sự kiện "UserRegistered" để xử lý sự kiện này.

Listener là một lớp được đăng ký với sự kiện tương ứng và được sử dụng để xử lý các hành động nào đó khi sự kiện được kích hoạt. Ví dụ, khi sự kiện "UserRegistered" được kích hoạt, lớp lắng nghe tương ứng với sự kiện này có thể gửi email xác nhận cho người dùng, hoặc lưu thông tin người dùng vào một bảng trong cơ sở dữ liệu.

Mối liên kết giữa event và listener trong Laravel được quản lý bởi Service Container, một thành phần chính của framework. Service Container cung cấp một cơ chế để đăng ký listener với event tương ứng, và khi sự kiện được kích hoạt, Service Container sẽ tự động khởi tạo các listener tương ứng và gọi các phương thức xử lý sự kiện.

Vì vậy, khi bạn đăng ký một listener với một event, bạn đang khai báo rằng "khi sự kiện này xảy ra, hãy xử lý nó bằng cách gọi lớp lắng nghe này". Mối quan hệ này giúp cho ứng dụng của bạn trở nên dễ dàng quản lý, mở rộng và bảo trì hơn.

Tổng kết

Như vậy, trong bài viết này chúng ta đã tìm hiểu về cách tạo và quản lý Event và Listener trong Laravel. Event và Listener là hai khái niệm quan trọng trong việc quản lý sự kiện và xử lý chúng trong ứng dụng web.

Chúng ta đã tìm hiểu cách tạo Event và Listener, sau đó đi vào chi tiết cách sử dụng chúng để xử lý các sự kiện trong Laravel. Bài viết cũng bao gồm các ví dụ cụ thể và hướng dẫn cách sử dụng các công cụ và tính năng trong Laravel để quản lý Event và Listener.

Việc sử dụng Event và Listener giúp cho việc xử lý các sự kiện trở nên dễ dàng hơn, giảm thiểu các khối lượng code không cần thiết và tăng tính bảo mật cho ứng dụng web.

Hy vọng bài viết này sẽ giúp các bạn hiểu rõ hơn về cách tạo và quản lý Event và Listener trong Laravel, từ đó giúp cho việc xử lý sự kiện trong ứng dụng trở nên thuận tiện hơn.

# Top 4 bài tutorials có liên quan đến Event và Listener bạn nên tham khảo

1. Nếu bạn là người đam mê tìm tòi và học hỏi sẽ không thể bỏ qua bài hướng dẫn của Laravel

Link bài viết : https://laravel.com/docs/9.x/events

2. Ngoài ra bạn có thể tham khảo thêm bài nói về Event và Listeners cơ bản

Link bài viết : https://viblo.asia/p/co-ban-ve-events-listeners-laravel-1Je5EXG1lnL

3. Bài này cho ta biết cách tạo ra một Event thì bài dưới đây sẽ giúp biết được cách sử dụng của nó

Link bài viết : https://freetuts.net/su-dung-event-trong-laravel-364.html

4. Nếu bạn đã đọc qua 4 bài trên thì nên đọc tổng quan về nó 1 lần nữa nhé rất bổ ích đó

Link bài viết :https://hoclaravel.net/tong-quan/quan-ly-su-kien-trong-ung-dung-voi-laravel-event/

Cùng chuyên mục:

Cách sử dụng Relationships trong Laravel

Cách sử dụng Relationships trong Laravel

Cách dùng Encryption và decryption trong Laravel

Cách dùng Encryption và decryption trong Laravel

Cách sử dụng Error Handling trong Laravel

Cách sử dụng Error Handling trong Laravel

Cách dùng URL Generation trong Larevel

Cách dùng URL Generation trong Larevel

Cách sử dụng Email Verification trong Laravel

Cách sử dụng Email Verification trong Laravel

Facades là gì? Cách dùng Facades trong Laravel

Facades là gì? Cách dùng Facades trong Laravel

Tìm hiểu và sử dụng Service Provider trong Laravel

Tìm hiểu và sử dụng Service Provider trong Laravel

Sử dụng Service Container trong Laravel dễ dàng

Sử dụng Service Container trong Laravel dễ dàng

Cách xử lý đa ngôn ngữ trong Laravel dễ dàng

Cách xử lý đa ngôn ngữ trong Laravel dễ dàng

Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản

Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản

Cách dùng Event Sourcing trong Laravel

Cách dùng Event Sourcing trong Laravel

Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel

Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel

Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ

Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ

Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản

Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản

Cách dùng Long polling trong Laravel để cải thiện trải nghiệm

Cách dùng Long polling trong Laravel để cải thiện trải nghiệm

Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime

Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime

Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime

Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime

Laravel WebSockets, các bước tạo WebSockets trong Laravel

Laravel WebSockets, các bước tạo WebSockets trong Laravel

Real-time web applications là gì ? Tầm quan trọng  trong Laravel

Real-time web applications là gì ? Tầm quan trọng trong Laravel

Cách tạo Database Testing trong Laravel

Cách tạo Database Testing trong Laravel

Top