luckcodes / yii2-events-manager
通过组件:事件管理器组织事件连接。
Requires
- yiisoft/yii2: ~2.0.0
This package is auto-updated.
Last update: 2024-09-20 11:50:05 UTC
README
用于 Yii 2 应用的组件
通过组件组织事件连接:事件管理器。
事件处理器仅在调用第一个事件时连接,不会增加系统负载。
安装
推荐通过 composer 安装此扩展。
或者运行
php composer.phar require --prefer-dist luckcodes/yii2-events-manager "~3.0"
或者在你的 composer.json
文件的相应部分添加:
"luckcodes/yii2-events-manager": "~3.0"
在配置文件中连接
'components' => [
'eventsManager' => [
'class'=>'luckcodes\eventsmanager\components\EventsManager',
]
]
手动连接事件
'components' => [
'eventsManager' => [
'class'=>'luckcodes\eventsmanager\components\EventsManager',
'events'=>[
'common\test\BlockTpl' =>[
'init_shortcode' =>[
['common\eventhandler\MainBlocksHandler', 'shortcode']
]
]
],
]
]
在示例中,我们为 common\test\BlockTpl
类的 init_shortcode
事件连接了事件处理器 ['common\eventhandler\MainBlocksHandler', 'shortcode']
。
其中 common\eventhandler\MainBlocksHandler
是处理器类的路径,而 shortcode
是在 init_shortcode
事件发生时将被调用的方法。
通过额外处理器连接
为了不使配置文件因大量事件连接而变得杂乱,事件管理器中提供了连接额外处理器的功能,这些处理器可以在内部(使用必要的逻辑)仅连接必要的事件。
连接自定义事件处理器的接口
'components' => [
'eventsManager' => [
'class'=>'luckcodes\eventsmanager\components\EventsManager',
'eventsConnectors'=>[
'luckcodes\items\handlers\events\ConnectEventsFrontend'
],
]
]
类 luckcodes\items\handlers\events\ConnectEventsFrontend
应该是 luckcodes\eventsmanager\classes\AddHandlers
的子类
额外的连接事件处理器的示例
文件: luckcodes\items\handlers\events\ConnectEventsFrontend
<?php
namespace luckcodes\themeblocks\src\handlers;
use luckcodes\eventsmanager\classes\AddHandlers;
class EventsManagerHandler extends AddHandlers
{
public function connect()
{
$this->addEventHandler(
'common\components\MenuBuilder',
'menu_build',
'common\modules\item\eventhandler\MenuBuilderComponent',
'addOptionsMenu'
);
}
}
该类将为 common\components\MenuBuilder
类的 menu_build
事件连接 common\modules\item\eventhandler\MenuBuilderComponent
处理器,并将调用 addOptionsMenu
方法。
行为
为了方便,包中包含了 luckcodes\eventsmanager\behaviors\EventsManagerBehavior
行为。需要将其连接到将生成事件的组件。
从 luckcodes\eventsmanager\components\EventsManager
中获取指定事件的处理程序。如果存在该事件的处理器,则连接并创建触发器的包装。
在组件中连接
public function behaviors()
{
return [
[
'class' => EventsManagerBehavior::class,
]
];
}
通过事件触发器包装调用事件
$this->eventTrigger(Event name,**Event** Event data);