webman event
1.0.0
ข้อดีของเหตุการณ์เมื่อเปรียบเทียบกับมิดเดิลแวร์ก็คือ เหตุการณ์ต่างๆ มีการวางตำแหน่งที่แม่นยำ (หรือละเอียดกว่า) มากกว่ามิดเดิลแวร์ และเหมาะสมกว่าสำหรับการขยายสถานการณ์ทางธุรกิจบางอย่าง ตัวอย่างเช่น เรามักจะพบผู้ใช้ที่จำเป็นต้องดำเนินการหลายอย่างหลังจากลงทะเบียนหรือเข้าสู่ระบบ ผ่านระบบเหตุการณ์ เราสามารถดำเนินการขยายการดำเนินการเข้าสู่ระบบให้เสร็จสมบูรณ์ได้โดยไม่บุกรุกโค้ดต้นฉบับ ซึ่งไม่เพียงแต่ช่วยลดการเชื่อมต่อของระบบเท่านั้น แต่ยัง ยังช่วยลดความเป็นไปได้ของ BUG
composer require tinywan/event
เหตุการณ์ LogErrorWriteEvent.php
namespace extend ;
use Symfony Contracts EventDispatcher Event ;
class LogErrorWriteEvent extends Event
{
const NAME = ' log.error.write ' ; // 事件名,事件的唯一标识
public $ log ;
public function __construct ( array $ log )
{
$ this -> log = $ log ;
}
public function handle ()
{
return $ this -> log ;
}
}
การฟังเหตุการณ์
return [
// 事件监听
' listener ' => [
extend LogErrorWriteEvent:: NAME => extend LogErrorWriteEvent::class,
extend DingTalkEvent:: NAME => extend DingTalkEvent::class,
],
];
การสมัครสมาชิก LoggerSubscriber.php
namespace extend ;
use Symfony Component EventDispatcher EventSubscriberInterface ;
use Symfony Contracts EventDispatcher Event ;
class LoggerSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents (): array
{
// 监听的不同事件,当事件触发时,会调用 onResponse 方法
return [
extend LogErrorWriteEvent:: NAME => ' onResponse ' ,
extend DingTalkEvent:: NAME => ' onResponse ' ,
];
}
/**
* @desc: 触发事件
* @param Event $event
*/
public function onResponse ( Event $ event )
{
// 一些具体的业务逻辑
var_dump ( $ event -> handle ());
}
}
สมัครสมาชิกกิจกรรม
return [
// 事件订阅
' subscriber ' => [
extend LoggerSubscriber::class
],
];
ทริกเกอร์เหตุการณ์ LogErrorWriteEvent
$ error = [
' errorMessage ' => '错误消息' ,
' errorCode ' => 500
];
Tinywan Event:: trigger ( new extend LogErrorWriteEvent ( $ error ), extend LogErrorWriteEvent:: NAME );
$ error = [
' errorMessage ' => '错误消息' ,
' errorCode ' => 500
];
event ( new extend LogErrorWriteEvent ( $ error ), extend LogErrorWriteEvent:: NAME );
ผลการดำเนินการ
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต Apache 2.0