horat1us / yii2-static-behavior
Yii2 的静态行为
1.1.0
2019-03-06 08:19 UTC
Requires
- php: >=7.2
- yiisoft/yii2: ^2.0.15
Requires (Dev)
- phpunit/phpunit: ^8.0
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2024-09-07 00:17:23 UTC
README
此包实现了静态行为,允许您将类似事件处理器的行为附加到外部对象。
使用示例:您使用包含 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
当某些处理器仅在单个模块中使用时,应使用此行为。例如
- 身份验证后的消息发送
- 用于双因素身份验证的令牌消息发送
它可以与控制器或任何其他组件(您需要配置事件)一起使用。