1. Tạo Sự Kiện (Create an Event)
- Mục đích: Tạo một lớp sự kiện để đại diện cho một hành động hoặc sự kiện cụ thể trong ứng dụng (ví dụ: người dùng đăng ký).
- Cách thực hiện: Sử dụng lệnh Artisan để tạo sự kiện.
php artisan make:event UserRegistered
Cấu trúc: Sự kiện thường có các thuộc tính cần thiết mà bạn muốn truyền đi khi phát sự kiện (ví dụ: thông tin người dùng).
// app/Events/UserRegistered.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. Tạo Listener (Create a Listener)
- Mục đích: Tạo một lớp listener để xử lý hành động khi sự kiện xảy ra (ví dụ: gửi email chào mừng).
- Cách thực hiện: Sử dụng lệnh Artisan để tạo listener.
php artisan make:listener SendWelcomeEmail
Cấu trúc: Listener sẽ chứa logic cần thiết để xử lý sự kiện.
// app/Listeners/SendWelcomeEmail.php namespace App\Listeners; use App\Events\UserRegistered; use Illuminate\Support\Facades\Mail; use App\Mail\WelcomeEmail; class SendWelcomeEmail { public function handle(UserRegistered $event) { Mail::to($event->user->email)->send(new WelcomeEmail($event->user)); } }
3. Đăng Ký Sự Kiện và Listener (Register Event and Listener)
- Mục đích: Đăng ký các sự kiện và listener trong
EventServiceProvider
để Laravel biết rằng khi sự kiện xảy ra, nó sẽ gọi listener nào. - Cách thực hiện: Thêm vào mảng
$listen
trongEventServiceProvider
.
// app/Providers/EventServiceProvider.php namespace App\Providers; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use App\Events\UserRegistered; use App\Listeners\SendWelcomeEmail; class EventServiceProvider extends ServiceProvider { protected $listen = [ UserRegistered::class => [ SendWelcomeEmail::class, ], ]; }
4. Phát Sự Kiện (Dispatch the Event)
- Mục đích: Khi một hành động cụ thể xảy ra (ví dụ: khi người dùng đăng ký), bạn cần phát sự kiện để thông báo cho hệ thống rằng sự kiện đó đã xảy ra.
- Cách thực hiện: Sử dụng hàm
event()
để phát sự kiện.
// app/Http/Controllers/Auth/RegisterController.php use App\Events\UserRegistered; // Giả sử bạn đã có logic để tạo một người dùng mới public function register(Request $request) { $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => bcrypt($request->password), ]); // Phát sự kiện event(new UserRegistered($user)); // Quay lại trang hoặc trả về phản hồi return redirect()->route('home')->with('success', 'Đăng ký thành công!'); }
Tóm Tắt
Quy trình sử dụng Event Listener trong Laravel gồm bốn bước chính:
- Tạo sự kiện: Xác định sự kiện và các thông tin cần thiết.
- Tạo listener: Viết logic xử lý cho sự kiện đó.
- Đăng ký sự kiện và listener: Kết nối sự kiện với listener trong
EventServiceProvider
. - Phát sự kiện: Kích hoạt sự kiện khi hành động xảy ra trong ứng dụng.
Quy trình này giúp bạn tổ chức mã nguồn một cách rõ ràng và cho phép tái sử dụng mã dễ dàng hơn.

Dương Trần Hà, hiện mình đang là kỹ công nghệ phần mềm và cũng là giám đốc thành lập công ty DTH Solutions. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn lập trình, nodejs, nestjs, laravel, yii2, reactjs, nextjs. Mình đã phát triển rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số thành công nhỏ, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.