Symfony 使用事件订阅服务器

Symfony 使用事件订阅服务器,symfony,symfony-2.6,Symfony,Symfony 2.6,我有活动订阅者: static public function getSubscribedEvents() { return array( 'event_1' => 'onEvent1', 'event_2' => 'onEvent2', ); } public function onEvent1() { } public function onEvent2() { } 它工作正常,但我希望侦听器方法onEvent1仅在成功执行event

我有活动订阅者:

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

public function onEvent1()
{

}

public function onEvent2()
{

}

它工作正常,但我希望侦听器方法onEvent1仅在成功执行eventevent_1后才能工作。我知道我可以为事件的方法设置优先级,但这并不能解决我的问题。有什么想法吗?谢谢。

您可以使用私有属性保存操作状态。在事件_1中,如果操作成功,您可以更新标志,然后在事件_2中检查标志是否处于所需状态:

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
        }
    }
}

布朗查再次感谢您的回复。但我做的有点不同:

我的订户事件

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;
    }
}
第一事件侦听器

class FirstEventListener
{

    public function onFirstEvent(FirstEvent $event)
    {   
        //code 

        $event->setResult();
    }

}
它工作正常:)