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