justcoded/yii2-event-listener

此包已被废弃且不再维护。没有推荐替代包。

Yii2 事件监听器

安装数: 18,255

依赖者: 0

推荐者: 0

安全性: 0

星级: 12

关注者: 2

分支: 4

开放问题: 0

类型:yii2-extension

1.0.2 2019-06-24 17:11 UTC

This package is auto-updated.

Last update: 2023-09-25 05:44:27 UTC


README

993323

Yii2 事件监听器


一个简单的事件监听器注册组件和基础抽象类,用于实现监听器或观察者。

安装

安装此扩展的首选方法是使用composer。

运行以下命令:

composer require --prefer-dist justcoded/yii2-event-listener "*"

或添加以下内容到你的composer.json文件中的require部分:

"justcoded/yii2-event-listener": "*"

组件配置

要使用事件监听器组件,您需要在应用程序配置中配置组件数组,并将组件名称添加到bootstrap数组中。

'components' => [
    'listener' => [
        'class'     => \justcoded\yii2\eventlistener\components\EventListener::class,
        'listeners' => [
        	...
        ],
        'observers' => [
        	...
        ],
    ],
],

    'bootstrap'  => ['log', 'listener'],

使用

监听器

监听器是一个单独的操作,可以在某些事件上执行。要注册监听器,您需要创建一个简单的类

<?php
namespace app\listeners;

use justcoded\yii2\eventlistener\listeners\Listener;
use yii\base\Event;

/**
 * Class SendUserGreeting
 */
class SendUserGreeting extends Listener
{
	/**
	 * Handle action on event trigger.
	 *
	 * @param Event $event
	 *
	 * @return void
	 */
	public function handle(Event $event)
	{
		/* @var \app\models\User $sender */
		$sender = $event->sender;
		
		// TODO: write your code here, for example, send user greeting email after it was registered or created.
	}
}

之后,您需要在组件内部的'listeners'配置数组中注册它

'components' => [
    'listener' => [
        'class'     => \justcoded\yii2\eventlistener\components\EventListener::class,
        'listeners' => [
        	\app\models\User::class => [
				\app\models\User::EVENT_AFTER_INSERT => \app\listeners\SendUserGreeting::class,
			],
        ],
    ],
],

观察者

观察者是一个类,可以订阅同一模型的不同事件。要创建观察者,您需要从基本的观察者类扩展它,并创建events()方法和处理这些事件的相应方法。

示例

<?php
namespace app\observers;

use app\controllers\SiteController;
use justcoded\yii2\eventlistener\observers\Observer;
use yii\base\Event;

/**
 * Class UserObserver
 */
class SiteControllerObserver extends Observer
{
	public function events()
	{
		return [
			SiteController::EVENT_BEFORE_ACTION => 'before',
			SiteController::EVENT_AFTER_ACTION => 'after',
		];
	}

	/**
	 * Handle before action event
	 *
	 * @param Event $event
	 *
	 * @return void
	 */
	public function before(Event $event)
	{
		/* @var SiteController $sender */
		$sender = $event->sender;
		
		// TODO: write your code here.
	}

	/**
	 * Handle after action event
	 *
	 * @param Event $event
	 *
	 * @return void
	 */
	public function after(Event $event)
	{
		/* @var SiteController $sender */
		$sender = $event->sender;
		
		// TODO: write your code here.
	}	
}

之后,您需要在组件内部的'observers'配置数组中注册它

'components' => [
    'listener' => [
        'class'     => \justcoded\yii2\eventlistener\components\EventListener::class,
        'observers' => [
        	app\controllers\SiteController::class => \app\observers\SiteControllerObserver::class,
        	app\models\User::class => \app\observers\UserObserver::class,
        ],
    ],
],

ActiveRevordObserver

该包还包含一个名为ActiveRecordObserver的特定类。此类已声明所有ActiveRecord事件及其处理方法

  • inserting()
  • inserted()
  • updating()
  • updated()
  • deleting()
  • deleted()
  • validating()
  • validated()
  • refreshed()
  • initialized()

示例

<?php
namespace app\observers;

use justcoded\yii2\eventlistener\observers\ActiveRecordObserver;
use yii\db\AfterSaveEvent;

/**
 * Class UserObserver
 */
class UserObserver extends ActiveRecordObserver
{
	/**
	 * Handle AFTER_UPDATE ActiveRecord event.
	 *
	 * @param AfterSaveEvent $event
	 *
	 * @return void
	 */
	public function updated(AfterSaveEvent $event)
	{
		/* @var \app\models\User $sender */
		$sender = $event->sender;
		
		// TODO: write your code here.
	}
}