Всем добрый день.
Вопрос такой. Я хочу сделать валидацию заказа Shopaholic в плагине.
Делаю так:

use Illuminate\Support\Facades\Event as EventOctober;`

далее в boot:

EventOctober::listen(\Lovata\OrdersShopaholic\Classes\Processor\OrderProcessor::EVENT_ORDER_FIND_USER_BEFORE_CREATE, function ($arUserData){
    trace_log($arUserData);
    return false;
});

Но событие не срабатывает. Есть у кого нибудь пример, как верно нужно слушать событие?

  • reazzon ответили на это сообщение.

    Electrica

    У тебя все правильно, кроме класса Event, которого ты подключаешь. Попробуй просто без указания полного пути. Октябрь сам подключит то что надо.

    Use Event;
    Use \Lovata\OrdersShopaholic\Classes\Processor\OrderProcessor;
    
    Event::listen(OrderProcessor::EVENT_ORDER_FIND_USER_BEFORE_CREATE, function ($arUserData){
        trace_log($arUserData);
        return false;
    });
    • Electrica ответили на это сообщение.

      reazzon да, там просто был уже созданный мной класс Event. В общем егоuse удалил, использую родной, но событие не срабатывает

      public function boot()
      {
          trace_log('Мы зашли в боот');
          Event::listen('shopaholic.order.before_create', function($arOrderData, $obUser) {
              //$arOrderData - array with order data from request
              //$obUser - user object
      
              trace_log('Мы попали сюда');
              print_r($arOrderData, 1);
      
              return false;
          });
          trace_log('Мы вышли из боот');
      }

      reazzon хотя самый прикол, return false; срабатывает, и заказ не создается, корзина остается заполненной

      • reazzon ответили на это сообщение.

        Electrica то-есть все отрабаывает как нужно просто trace_log не работает?

        • Electrica ответили на это сообщение.

          reazzon вот я уже тоже так подумал. Каким способом я еще могу распечатать данные?

          • reazzon ответили на это сообщение.

            Electrica попробуй \Log::info('Мы вышли из боот')

            • Electrica ответили на это сообщение.

              reazzon Вошли и вышли работают, а вот внутри события нет

              • reazzon ответили на это сообщение.

                Electrica попробуй сделать так:

                Создай в routes.php роут /test:

                Route::get('/test', function(){
                    //
                });

                Внутри него сделай fire ивента, любого, или с тем, которым ты работаешь. Потом просто открой эту ссылку.

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

                • Electrica ответили на это сообщение.

                  reazzon Итак:

                  Route::get('/test', function(){
                      Event::fire('electrica.test', 'Это мы со своего события');
                  });

                  В плагине:

                  Event::listen('electrica.test', function($data){
                      trace_log($data);
                  });

                  Итог:

                  Что то мне кажется, что как то парметры приходят, что я не верно их печатаю

                  • reazzon ответили на это сообщение.

                    Electrica Вроде все правильно, даже не знаю, тут надо @kharanenka писать, и с ним выяснять что да как, почему событие не приходит.

                    не, скорее всего все корректно работает, просто я видать не так данные получаю: