遗留代码中的Zend 2 EventManager

时间:2015-06-12 07:58:29

标签: php zend-framework event-handling

我们处于中间位置,将我们已有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]);
            }
        }
    }

}

我认为问题在于命名空间,但是我们必须从服务管理器中找到一个事件....

0 个答案:

没有答案