yii2 注册一个新事件(trigger Event)


有些时候我们需要在某个方法的中间注册一个新事件,确保某些业务的可拓展性。


下面我介绍一下注册一个新事件的方法:

第一步:需要的地方(比如控制器或模型)中定义一个事件常量(如:const EVENT_CREATE_ORDER)。

第二步:创建一个Event类继承 yii/base/Event.

第三步:注册该事件

示例:我需要在订单编号中增加一个事件,方便按照客户的需求修改订单编号的前缀。

1、Order.php

class Order extends \yii\db\ActiveRecord { /** * 生成单号事件 */
    const EVENT_CREATE_ORDER = 'EVENT_CREATE_ORDER'; /** * @var string 订单编号前缀 */
    public static $orderNumPrefix = 'OD'; /** * @purpose: 生成订单编号 * @modif by chrdai * @modify time 2019-03-25 */
    public function createOrderNum(){ $e = new CreateOrderEvent([ 'params' => ['orderNumPrefix' => self::$orderNumPrefix], ]); // 某些客户有修单号的需求
        $this->trigger(static::EVENT_CREATE_ORDER,$e); $prefix = ArrayHelper::getValue($e->params,'orderIdPrefix'); $count = \Yii::$app->redis->incr("count:order_num"); //取余数是为了防止自增的号码过大导致某些肯能出现的问题
        return sprintf($prefix . '-%s-%04d', date('ymd'), intval($count) % 9999); } }

2、CreateOrderEvent.php

use yii\base\Event; class CreateOrderEvent extends Event { /** * @var array 需要修改的参数 */
    public $params = []; /** * @var bool */
    public $skip = false; }

3、使用方法:

/* * ++------修改某个属性 start------++ * ++ | class | 类名 * ++ | event | 事件 * ++ | [$key => $value] | 需要修改的属性 */
$arrProperties = [ [ 'class' => Order::className(),
        'event' => Order::EVENT_CREATE_ORDER,
        'orderNumPrefix' => 'ON', //将工单号的前缀由OD改为ON
    ], ]; foreach ($arrProperties as $val){ Event::on(current($val),next($val),function(CreateOrderEvent $e) use($val) { end($val); $e->params[key($val)] = end($val); }); reset($val); }

此为chrdai工作中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/p/10595584.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM