การจัดการเหตุการณ์
webman/event
ให้กลไกเหตุการณ์ที่ดีเยี่ยมที่สามารถทำให้เป็นไปได้โดยไม่บุกรุกในโค้ดให้ทำธุรกรรมธุรกิจบางอย่าง และทำให้โมดูลธุรกิจต่าง ๆ สามารถรับเหตุการณ์และดำเนินการธุรกิจที่เกี่ยวข้องได้
การติดตั้ง
composer require webman/event
การรับฟังเหตุการณ์
การรับฟังเหตุการณ์จะถูกกำหนดค่าทั้งหมดที่ไฟล์ config/event.php
<?php
return [
'user.register' => [
[app\event\User::class, 'register'],
// ...ฟังก์ชันประมวลผลเหตุการณ์อื่น ๆ...
],
'user.logout' => [
[app\event\User::class, 'logout'],
// ...ฟังก์ชันประมวลผลเหตุการณ์อื่น ๆ...
]
];
คำอธิบาย:
user.register
และuser.logout
เป็นชื่อเหตุการณ์เป็นสตริง แนะนำให้ใช้ตัวพิมพ์เล็กและใช้จุด (.
) เป็นตัวแบ่ง- หนึ่งเหตุการณ์สามารถมีหลายฟังก์ชันประมวลผลเหตุการณ์ และการเรียกใช้จะเป็นตามลำดับของการกำหนดค่า
ฟังก์ชันประมวลผลเหตุการณ์
ฟังก์ชันประมวลผลเหตุการณ์สามารถเป็นเมทอดของคลาส ฟังก์ชัน หรือฟังก์ชันปิด เช่น
ตัวอย่างการสร้างคลาสประมวลผลเหตุการณ์ app/event/User.php
(ถ้าโฟลเดอร์ไม่มีให้สร้างเอง)
<?php
namespace app\event;
class User
{
function register($user)
{
var_export($user);
}
function logout($user)
{
var_export($user);
}
}
การเผยแพร่เหตุการณ์
ใช้ Event::emit($event_name, $data);
เพื่อเผยแพร่เหตุการณ์ เช่น
<?php
namespace app\controller;
use support\Request;
use Webman\Event\Event;
class User
{
public function register(Request $request)
{
$user = [
'name' => 'webman',
'age' => 2
];
Event::emit('user.register', $user);
}
}
เกริ่นนำ
พารามิเตอร์ $data ของEvent::emit($event_name, $data);
สามารถเป็นข้อมูลใดก็ได้ เช่น อาร์เรย์ อินสแตนซ์คลาส สตริง และอื่น ๆ
การฟังเหตุการณ์ด้วยอักขระสัญลักษณ์
การลงทะเบียนการฟังเหตุการณ์ด้วยอักขระสัญลักษณ์ ทำให้คุณสามารถฟังหลายเหตุการณ์ด้วยการโมดูลเดียวกัน เช่น กำหนดค่าใน config/event.php
<?php
return [
'user.*' => [
[app\event\User::class, 'deal']
],
];
เราสามารถใช้งาน $event_data ที่เป็นอาร์กิวเมนต์ที่สองของฟังก์ชันประมวลผลเหตุการณ์ได้
<?php
namespace app\event;
class User
{
function deal($user, $event_name)
{
echo $event_name; // ชื่อเหตุการณ์ที่เฉพาะเจาะจง เช่น user.register user.logout และอื่น ๆ
var_export($user);
}
}
หยุดการกระจายเหตุการณ์
เมื่อเราคืนค่า false
ในฟังก์ชันประมวลผลเหตุการณ์ คุณลักษณะประการที่เหตุการณ์นั้นจะหยุด
การประมวลผลเหตุการณ์ด้วยฟังก์ชันปิด
ฟังก์ชันประมวลผลเหตุการณ์สามารถเป็นเมทอดของคลาส หรือฟังก์ชันปิด ตัวอย่าง
<?php
return [
'user.login' => [
function($user){
var_dump($user);
}
]
];
การดูเหตุการณ์และการฟัง
ใช้คำสั่ง php webman event:list
เพื่อดูเหตุการณ์ที่กำหนดในโปรเจคและการฟังก์ชันจัดการเหตุการณ์
ข้อควรระวัง
การจัดการเหตุการณ์ไม่ได้เป็นแบบไม่สม่ำเสมอ การจัดการเหตุการณ์ไม่เหมาะสำหรับการจัดการธุรกิจที่ช้า ซึ่งควรใช้คิวข้อความในการจัดการเช่น webman/redis-queue