Тема: Событие создания заказа

При создании модуля нужно отловить событие создание заказа. Событие почему-то срабатывает 3 раза, если сгенерировать свое событие, то оно вызывается 4 раза.

Thumbs up Thumbs down

2

Re: Событие создания заказа

Событие генерируется в методе make_order в файле /application/modules/shop/order.php

Events::create()->registerEvent(['order' => $order, 'price' => $order->getTotalPrice()], 'Cart:MakeOrder')->runFactory();

При создании модуля в методе autoload вешается обработчик 'handler' на событие:

Events::create()->onShopMakeOrder()->setListener('handler');

или

Events::create()->setListener('handler', 'Cart:MakeOrder');

Функция handler в модуле:

 public static function handler($arg)
 {
      print_r($arg);
 }

В методе make_order генерируется еще 2 события:

Events::create()->registerEvent([], 'Cart:OrderValidated')->runFactory();
Events::create()->removeEvent('Cart:OrderValidated');

...

Events::create()->registerEvent($userInfo, 'FrontOrder:userCreate');
Events::runFactory();

В конечном итоге печатаются передаваемые аргументы 3 раза, хотя handler подписан только на одно событие.

Thumbs up Thumbs down

3

Re: Событие создания заказа

попробуйте сделать следующее.

в класе :

    public static $check_event = false;

в методе autoload

  if (self::$check_event === false) {
            Events::create()->onShopMakeOrder()->setListener('your_methods');
            self::$check_event = true;
        }

Thumbs up Thumbs down

4

Re: Событие создания заказа

Нет, не работает, все равно 3 раза вызывается метод.

Thumbs up Thumbs down