yiicod/yii2-listener

为Yii2框架提供的简单而强大的事件监听器

安装次数: 9,537

依赖者: 0

建议者: 0

安全性: 0

星标: 14

关注者: 4

分支: 5

开放问题: 0

类型:yii2-extension

1.0.7 2018-04-09 20:21 UTC

This package is auto-updated.

Last update: 2024-08-27 00:32:55 UTC


README

Latest Stable Version Total Downloads Scrutinizer Code QualityCode Climate

提供监听逻辑。命令解析选定的路径以查找所有监听器/订阅者(依赖于ListenerInterface和SubscriberInterface实现)。监听器可以用于单个事件,而订阅者可以用于多个事件。

安装

运行以下命令

php composer.phar require --prefer-dist yiicod/yii2-listener "*"

或者将以下内容添加到你的composer.json文件中

"yii2-listener": "*"

Web配置

'bootstrap' => ['listener'],
'components' => [
    'listener' => [
        'class' => 'yiicod\listener\components\Listener'
    ],
]

控制台配置

'controllerMap' => [
    'listener' => [
        'class' => \yiicod\listener\commands\Listener::class
    ],
]

运行命令。此命令将预热和准备所有监听器和订阅。每次创建新的监听器或订阅时,请运行此命令。

listener/parse

要触发事件,请参阅yii手册:https://yiiframework.cn/doc-2.0/guide-concept-events.html#class-level-event-handlers

监听器使用

namespace frontend\observers\listeners;

use yii\db\ActiveRecord;
use yiicod\listener\components\listeners\ListenerAbstract;

class TestListener extends ListenerAbstract
{
   /**
    * Call on event method
    */
   public function handle($event)
   {
       // TODO: Implement handle() method.
   }

   /**
    * Return event name for emit
    * @return string
    */
   public static function event(): string
   {
       return ActiveRecord::class . '@' . ActiveRecord::EVENT_AFTER_FIND;
   }
}

订阅者使用

namespace frontend\observers\subscribers;

use yii\db\ActiveRecord;
use yiicod\listener\components\listeners\SubscriberAbstract;

class TestSubscriber extends SubscriberAbstract
{
   /**
    * @return array
    * [
    *      'event_class@event1' => 'on'
    *      'event_class@event2' => 'on'
    * ]
    */
   public static function subscribe(): array
   {
       return [
           ActiveRecord::class . '@' . ActiveRecord::EVENT_BEFORE_INSERT => 'on',
           ActiveRecord::class . '@' . ActiveRecord::EVENT_AFTER_INSERT => 'on'
       ];
   }

   /**
    * Call on event method
    */
   public function on($event)
   {
       // Handle
   }
}