使用事件订阅者
Using Event Subscribers
我有活动订阅者:
static public function getSubscribedEvents()
{
return array(
'event_1' => 'onEvent1',
'event_2' => 'onEvent2',
);
}
public function onEvent1()
{
}
public function onEvent2()
{
}
它工作正常,但我希望侦听器方法 onEvent1 仅在成功执行事件 event_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
}
}
}
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();
}
}
它工作正常:)
我有活动订阅者:
static public function getSubscribedEvents()
{
return array(
'event_1' => 'onEvent1',
'event_2' => 'onEvent2',
);
}
public function onEvent1()
{
}
public function onEvent2()
{
}
它工作正常,但我希望侦听器方法 onEvent1 仅在成功执行事件 event_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
}
}
}
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();
}
}
它工作正常:)