要将新事件附加到侦听器,我使用如下代码并正常工作:
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'));
(...)
但是不起作用,我怎么能这样做呢? (为避免听取所有行动)
答案 0 :(得分:1)
简短的回答是你不能。
然而,您可以通过将attach方法的一系列事件名称交给多个事件来监听,例如..
$this->listeners[] = $sharedEvents->attach('*',
array('register.post', 'edit.post', 'create.post'),
array($this, 'log')
);
答案 1 :(得分: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模块代码以获取更多代码: