{"id":15080817,"url":"https://github.com/tinywan/webman-event","last_synced_at":"2025-10-05T13:30:19.462Z","repository":{"id":57070191,"uuid":"438670931","full_name":"Tinywan/webman-event","owner":"Tinywan","description":"the event for webman plugin","archived":true,"fork":false,"pushed_at":"2022-04-18T09:04:30.000Z","size":64,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-23T00:42:15.991Z","etag":null,"topics":["dispatcher","event","php","php-library","symfony","webman","workerman"],"latest_commit_sha":null,"homepage":"https://www.workerman.net/webman","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tinywan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-15T15:03:18.000Z","updated_at":"2024-04-07T09:03:36.000Z","dependencies_parsed_at":"2022-08-29T15:41:50.129Z","dependency_job_id":null,"html_url":"https://github.com/Tinywan/webman-event","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tinywan%2Fwebman-event","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tinywan%2Fwebman-event/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tinywan%2Fwebman-event/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tinywan%2Fwebman-event/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tinywan","download_url":"https://codeload.github.com/Tinywan/webman-event/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235399012,"owners_count":18983814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dispatcher","event","php","php-library","symfony","webman","workerman"],"created_at":"2024-09-25T05:31:45.633Z","updated_at":"2025-10-05T13:30:19.151Z","avatar_url":"https://github.com/Tinywan.png","language":"PHP","readme":"# webman event plugin\n\n[![Latest Stable Version](http://poser.pugx.org/tinywan/event/v)](https://packagist.org/packages/tinywan/event) \n[![Total Downloads](http://poser.pugx.org/tinywan/event/downloads)](https://packagist.org/packages/tinywan/event) \n[![Latest Unstable Version](http://poser.pugx.org/tinywan/event/v/unstable)](https://packagist.org/packages/tinywan/event) \n[![License](http://poser.pugx.org/tinywan/event/license)](https://packagist.org/packages/tinywan/event) \n[![PHP Version Require](http://poser.pugx.org/tinywan/event/require/php)](https://packagist.org/packages/tinywan/event)\n\n事件相比较中间件的优势是事件比中间件更加精准定位（或者说粒度更细），并且更适合一些业务场景的扩展。例如，我们通常会遇到用户注册或者登录后需要做一系列操作，通过事件系统可以做到不侵入原有代码完成登录的操作扩展，降低系统的耦合性的同时，也降低了BUG的可能性。\n\n## 安装\n\n```shell script\ncomposer require tinywan/event\n```\n\n## 快速开始\n\n### 监听事件\n\n事件类 `LogErrorWriteEvent.php`\n\n```php\nnamespace extend;\n\nuse Symfony\\Contracts\\EventDispatcher\\Event;\n\nclass LogErrorWriteEvent extends Event\n{\n    const NAME = 'log.error.write';  // 事件名，事件的唯一标识\n\n    public $log;\n\n    public function __construct(array $log)\n    {\n        $this-\u003elog = $log;\n    }\n\n    public function handle()\n    {\n        return $this-\u003elog;\n    }\n}\n```\n\n事件监听\n\n```php\nreturn [\n    // 事件监听\n    'listener'    =\u003e [\n        \\extend\\LogErrorWriteEvent::NAME =\u003e \\extend\\LogErrorWriteEvent::class,\n        \\extend\\DingTalkEvent::NAME =\u003e \\extend\\DingTalkEvent::class,\n    ],\n];\n```\n\n### 事件订阅\n\n订阅类 `LoggerSubscriber.php`\n\n```php\nnamespace extend;\n\n\nuse Symfony\\Component\\EventDispatcher\\EventSubscriberInterface;\nuse Symfony\\Contracts\\EventDispatcher\\Event;\n\nclass LoggerSubscriber implements EventSubscriberInterface\n{\n    public static function getSubscribedEvents(): array\n    {\n        // 监听的不同事件，当事件触发时，会调用 onResponse 方法\n        return [\n            \\extend\\LogErrorWriteEvent::NAME =\u003e 'onResponse',\n            \\extend\\DingTalkEvent::NAME =\u003e 'onResponse',\n        ];\n    }\n\n    /**\n     * @desc: 触发事件\n     * @param Event $event\n     */\n    public function onResponse(Event $event)\n    {\n        // 一些具体的业务逻辑\n        var_dump($event-\u003ehandle());\n    }\n}\n```\n\n事件订阅\n```php\nreturn [\n    // 事件订阅\n    'subscriber' =\u003e [\n         \\extend\\LoggerSubscriber::class\n    ],\n];\n```\n\n### 事件触发器\n\n触发 `LogErrorWriteEvent` 事件。\n\n```php\n$error = [\n    'errorMessage' =\u003e '错误消息',\n    'errorCode' =\u003e 500\n];\nTinywan\\Event::trigger(new \\extend\\LogErrorWriteEvent($error), \\extend\\LogErrorWriteEvent::NAME);\n```\n\n### 助手函数（推荐）\n\n```php\n$error = [\n    'errorMessage' =\u003e '错误消息',\n    'errorCode' =\u003e 500\n];\nevent(new \\extend\\LogErrorWriteEvent($error), \\extend\\LogErrorWriteEvent::NAME);\n```\n\n执行结果\n\n![打印结果](./trigger.png)\n\n## License\n\nThis project is licensed under the [Apache 2.0 license](LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftinywan%2Fwebman-event","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftinywan%2Fwebman-event","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftinywan%2Fwebman-event/lists"}