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é!
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?
-
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.
-
Đ灵活: 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ó.
-
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