horat1us/yii2-static-behavior

1.1.0 2019-03-06 08:19 UTC

This package is auto-updated.

Last update: 2024-09-07 00:17:23 UTC


README

Build Status codecov

此包实现了静态行为,允许您将类似事件处理器的行为附加到外部对象。

使用示例:您使用包含 ActiveRecord 的包。如果您需要处理此记录的一些事件(beforeInsert、afterInsert 等),这个包绝对适合您。

该静态行为使用底层的 yii\base\Event::on()yii\base\Event::off()

使用此静态行为的主要优点

  • 事件处理类(ItemInterface)将在事件被调用之前实例化,因此依赖项也将按需加载。

安装

composer require horat1us/yii2-static-behavior

结构

  • StaticBehavior - 主要类,负责处理附加和分离处理器。
  • Bootstrap - 可配置的应用程序引导类。它使用 StaticBehavior 在应用程序请求之前附加处理器,并在请求之后分离。
  • ItemInterface - 描述简单的事件处理程序(用于 StaticBehavior)。
  • Item - 抽象 ItemInterface 实现。允许为不同的事件配置处理器(例如方法)。
  • Bootstrap\Behavior - 在动作之前附加处理器并在控制器/模块动作之后分离的行为。如果某些处理器仅在模块执行时使用,则应使用此行为。

使用

StaticBehavior

首先,您需要实现 ItemInterface。然后,使用实现的项目配置您的 StaticBehavior

注意:您可以使用 \Closure 代替项目类(不推荐)

<?php

namespace Example;

use yii\db;
use yii\base;
use Horat1us\Yii\StaticBehavior;

class ExternalRecord extends db\ActiveRecord
{
    // some implementation you cannot change
}

$staticBehavior = new StaticBehavior([
    'target' => ExternalRecord::class,
    'items' => [
        base\Model::EVENT_BEFORE_VALIDATE => function(base\Event $event) {
            // you can handle event in \Closure
        },
        base\Model::EVENT_AFTER_VALIDATE => [
            // custom item implementation
            'class' => StaticBehavior\Item::class,
        ],
        db\ActiveRecord::EVENT_INIT => [
            // or use interface to implement items
            'class' => StaticBehavior\ItemInterface::class,
        ],
    ],
]);

// To attach event handlers to class
$staticBehavior->attach();

// To detach attached event handlers from class
$staticBehavior->detach();

详细示例

Bootstrap

要引导您的应用程序,您应该使用 Bootstrap。它将在应用程序请求之前附加处理器,并在请求之后分离。

<?php

use Horat1us\Yii\StaticBehavior;

// config.php

return [
    'bootstrap' => [
        'class' => StaticBehavior\Bootstrap::class,
        'behaviors' => [
            // StaticBehavior references. See previous section for examples.
        ],
    ],
];

Item

项目的主要用途 - 事件处理器的按需依赖注入。您可以在构造函数中定义依赖项或使用 yii2-way 配置(推荐)。

处理 yii\db\ActiveRecord 事件的项:示例(处理 yii\db\ActiveRecord 事件)

Bootstrap\Behavior

当某些处理器仅在单个模块中使用时,应使用此行为。例如

  • 身份验证后的消息发送
  • 用于双因素身份验证的令牌消息发送

它可以与控制器或任何其他组件(您需要配置事件)一起使用。

示例(授权令牌)

贡献者

许可证

MIT