3

要将新事件附加到侦听器,我使用如下代码并且工作正常:

class Listener implements ListenerAggregateInterface
{
    /**
     * @var \Zend\Stdlib\CallbackHandler[]
     */
    protected $listeners = array();

    /**
     * {@inheritDoc}
     */
    public function attach(EventManagerInterface $events)
    {
        $sharedEvents      = $events->getSharedManager();

        $this->listeners[] = $sharedEvents->attach('*', '*', array($this, 'log'));
    }

    public function detach(EventManagerInterface $events)
    {
        foreach ($this->listeners as $index => $listener) {
            if ($events->detach($listener)) {
                unset($this->listeners[$index]);
            }
        }
    }

    public function log($event)
    {
        // Log  feature here
    }
}

我只想关联一些动作,而不是“*”,例如关联以“.post”结尾的动作,如下所示:

(...)
$this->listeners[] = $sharedEvents->attach('*', '*.post', array($this, 'log'));
(...)

但是不起作用,我该怎么做呢?(避免听所有动作)

4

2 回答 2

1

简短的回答是你不能。

但是,您可以通过将事件名称数组传递给 attach 方法来侦听多个事件,例如..

$this->listeners[] = $sharedEvents->attach('*', 
    array('register.post', 'edit.post', 'create.post'), 
    array($this, 'log')
);
于 2013-06-17T16:36:34.517 回答
1

您可以使用通配符侦听*器在日志函数中侦听并按事件名称过滤,如下所示:

public function log($event)
{

    // Get event name
    $eventName = $event->getName();

    // Perform any string comparison you like here
    if($eventName === 'register'){ 

        // Do something
    }
}

您还可以在 GitHub 上查看我的 zf2-event-logger 模块代码以获取更多代码:

https://github.com/jvandemo/zf2-event-logger

于 2013-06-17T17:43:03.957 回答