我们处于中间位置,将我们已有10年历史的系统(php 3.0代码)改装为Zend 2
进展很混乱,但我们终于迈出了我们想要在开发中使用事件的步骤。我们已经在使用它们但是由于一些奇怪的原因,当我们在类之外的类之外使用他时,事件管理器不会注册我们的事件调用:
$eventManager = $serviceManager->get('EventManager');
$cartId = getvar('showcartid');
$eventManager->trigger('MainEvent.PreRender');
但是当我们将他与
一起使用时$ eventManager-> addIdentifiers( 'MainEvent');
函数调用,所以我们手动添加标识符,然后接受调用。
$eventManager = $serviceManager->get('EventManager');
$eventManager->addIdentifiers('MainEvent');
$cartId = getvar('showcartid');
$eventManager->trigger('MainEvent.PreRender');
问题是当我们使用它们中的许多时......它在标识符中变得混乱......
任何人都知道我们如何才能使事件触发,以便他对全局实例进行处理?
这是我们的基础监听器类。
namespace DIG\Listener;
use Zend\EventManager\EventManagerInterface;
class ListenerConfigAware implements ListenerConfigAwareInterface
{
protected $eventsConfig;
protected $identifier;
public function setEventConfig(array $eventConfigs)
{
$this->eventsConfig = $eventConfigs;
}
public function setIdentifier($identifier)
{
$this->identifier = $identifier;
}
public function attach(EventManagerInterface $events)
{
foreach ($this->eventsConfig as $eventConfig) {
if (is_array($this->identifier)) {
foreach ($this->identifier as $identifier) {
$this->listeners[] = $events->attach("$identifier." . $eventConfig['name'], array($this, $eventConfig['method']), $eventConfig['priority']);
}
} else {
$this->listeners[] = $events->attach($this->identifier . "." . $eventConfig['name'], array($this, $eventConfig['method']), $eventConfig['priority']);
}
}
return $this;
}
public function detach(EventManagerInterface $events)
{
foreach ($this->listeners as $key => $listener) {
if ($events->detach($listener)) {
unset($this->listeners[$key]);
}
}
}
}
我认为问题在于命名空间,但是我们必须从服务管理器中找到一个事件....