luckcodes/yii2-events-manager

通过组件:事件管理器组织事件连接。

安装: 0

依赖: 0

建议者: 0

安全: 0

星星: 0

关注者: 1

分支: 0

开放问题: 0

类型:yii2-extension

3.0 2022-11-20 07:31 UTC

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);