【问题标题】:Using Event Subscribers使用事件订阅者
【发布时间】:2015-02-03 05:55:47
【问题描述】:

我有活动订阅者:

static public function getSubscribedEvents()
{
   return array(
      'event_1' => 'onEvent1',
      'event_2' => 'onEvent2',
   );
}

public function onEvent1()
{

}

public function onEvent2()
{

}

它可以正常工作,但我希望侦听器方法 onEvent1 只有在成功执行事件 event_1 后才能工作。我知道我可以优先考虑事件的方法,但这并不能解决我的问题。任何的想法?谢谢。

【问题讨论】:

    标签: symfony symfony-2.6


    【解决方案1】:

    您可以拥有一个私有属性来保存操作的状态。在event_1中如果操作成功,你可以更新flag,然后在event_2中检查flag是否处于你需要的状态:

    class MyEventSubscriber{
        private $event1Successful = false;
    
        static public function getSubscribedEvents()
        {
           return array(
              'event_1' => 'onEvent1',
              'event_2' => 'onEvent2',
           );
        }
    
        public function onEvent1()
        {
            if(myOperation()){
                $this->event1Successful = true;
            }
        }
    
        public function onEvent2()
        {
            if($this->event1Successful){
                // your code here
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      Broncha 再次感谢您的回复。但我做了一些不同的事情:

      我的订阅者事件

      static public function getSubscribedEvents()
      {
         return array(
            'FirstEvent' => 'onMethod1',
            'SecondEvent' => 'onMethod2',
         );
      }
      
      public function onMethod1(FirstEvent $event)
      {
          if ($event->getResult() == 'ready') {
               //code
          }
      }
      
      public function onMethod2()
      {
      
      }
      

      第一个事件

      class FirstEvent extends Event
      {
          private $result = 'no ready';
      
          public function setResult()
          {
              $this->result = 'ready';
          }
      
          public function getResult()
          {
              return $this->result;
          }
      }
      

      FirstEvent 监听器

      class FirstEventListener
      {
      
          public function onFirstEvent(FirstEvent $event)
          {   
              //code 
      
              $event->setResult();
          }
      
      }
      

      效果很好:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多