Laravel - Xử lý sự kiện
Sự kiện cung cấp một triển khai người quan sát đơn giản cho phép người dùng đăng ký và lắng nghe các sự kiện khác nhau được kích hoạt trong ứng dụng web. Tất cả các lớp sự kiện trong Laravel được lưu trữ trongapp/Events thư mục và trình nghe được lưu trữ trong app/Listeners thư mục.
Lệnh thủ công để tạo sự kiện và người nghe trong ứng dụng web của bạn được hiển thị bên dưới:
php artisan event:generate
Lệnh này tạo các sự kiện và trình nghe vào các thư mục tương ứng như đã thảo luận ở trên.
Sự kiện và Trình nghe là một cách tuyệt vời để tách ứng dụng web, vì một sự kiện có thể có nhiều trình nghe độc lập với nhau. Thư mục sự kiện được tạo bởi lệnh thủ công bao gồm hai tệp sau: event.php và SomeEvent.php. Chúng được hiển thị ở đây -
Event.php
<?php
namespace App\Events;
abstract class Event{
//
}
Như được đề cập ở trên, event.php bao gồm định nghĩa cơ bản của lớp Event và yêu cầu không gian tên App\Events. Xin lưu ý rằng sự kiện do người dùng xác định hoặc tùy chỉnh được tạo trong tệp này.
SomeEvent.php
<?php
namespace App\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class SomeEvent extends Event{
use SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct() {
//
}
/**
* Get the channels the event should be broadcast on.
*
* @return array
*/
public function broadcastOn() {
return [];
}
}
Quan sát rằng tệp này sử dụng tuần tự hóa để phát các sự kiện trong ứng dụng web và các thông số cần thiết cũng được khởi tạo trong tệp này.
Ví dụ: nếu chúng ta cần khởi tạo biến thứ tự trong hàm tạo để đăng ký một sự kiện, chúng ta có thể thực hiện theo cách sau:
public function __construct(Order $order) {
$this->order = $order;
}
Người nghe
Người nghe xử lý tất cả các hoạt động được đề cập trong một sự kiện đang được đăng ký. Lệnh nghệ nhânevent:generate tạo ra tất cả listeners bên trong app/listenersdanh mục. Thư mục Người nghe bao gồm một tệpEventListener.php trong đó có tất cả các phương thức cần thiết để xử lý trình nghe.
EventListener.php
<?php
namespace App\Listeners;
use App\Events\SomeEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class EventListener{
/**
* Create the event listener.
*
* @return void
*/
public function __construct() {
//
}
/**
* Handle the event.
*
* @param SomeEvent $event
* @return void
*/
public function handle(SomeEvent $event) {
//
}
}
Như đã đề cập trong mã, nó bao gồm handlechức năng để quản lý các sự kiện khác nhau. Chúng tôi có thể tạo ra nhiều người nghe độc lập khác nhau nhắm mục tiêu đến một sự kiện duy nhất.