2017-01-30 3 views
2

в более старом приложении ZF2. Я меняю макет в диспетчерском прослушивании, если согласованный маршрут начинается с admin. Теперь я начал новый проект, и вы хотите использовать компоненты ZF3, но менеджер событий есть некоторые изменения, и я получаю следующее исключение:ZF3 - событие EventManager и отправка

Uncaught TypeError: Argument 2 passed to Zend\EventManager\EventManager::attach() must be callable, none given

Я не знаю, на самом деле, как справиться с этим в ZF3. Вот мои соответствующие исходные коды, чтобы изменить расположение в моем ZF2 применения:

module.php

namespace Admin; 

use Zend\EventManager\EventInterface; 
use Zend\ModuleManager\Feature\BootstrapListenerInterface; 

class Module implements BootstrapListenerInterface { 

    public function onBootstrap(EventInterface $event) { 
     $application = $event->getApplication(); 
     $eventManager = $application->getEventManager(); 
     $serviceManager = $application->getServiceManager(); 

     $eventManager->attach($serviceManager->get('Admin\Listener\Dispatch')); 
    } 

} 

DispatchListener.php

namespace Admin\Listener; 

use Zend\EventManager\AbstractListenerAggregate; 
use Zend\EventManager\EventInterface; 
use Zend\EventManager\EventManagerInterface; 
use Zend\Mvc\MvcEvent; 

class DispatchListener extends AbstractListenerAggregate { 

    public function attach(EventManagerInterface $eventManager) { 
     $this->listeners[] = $eventManager->attach(
      MvcEvent::EVENT_DISPATCH, array($this, 'onDispatch'), 100 
     ); 
    } 

    public function onDispatch(EventInterface $event) { 
     $matchedRouteName = $event->getRouteMatch()->getMatchedRouteName(); 

     if (strpos($matchedRouteName, 'admin') === 0) { 
      $event->getViewModel()->setTemplate('layout/admin'); 
     } 
    } 

} 
+0

Попробуйте добавить второй аргумент в: public function attach (EventManagerInterface $ eventManager, $ priodity = 1) {...} – tasmaniski

ответ

0

zf3 больше ориентирован на развязки компонентов , кажется, что агрегаты были удалены, чтобы прикрепить событие, см. документ api

event manager

для краткости на прикреплении сообщения говорит

attach($eventName, callable $listener, $priority = 1) : callable 

Я надеюсь, так как вы не уточняя именем_событие вы получаете сообщение об ошибке

обновления:

увидеть ссылку на руководство по миграции от v2 до v3 для менеджера событий

Removed functions

+0

Агрегаты все еще существуют, см. Документацию: [Docs ZF - Event manager - Aggregates] (https: // docs.zendframework.com/zend-eventmanager/aggregates/) – Kwido

+0

Хорошо, я изменил приложение-слушатель в моем Module.php на следующее, и теперь все работает нормально. Большое спасибо! '$ eventManager-> attach (MvcEvent :: EVENT_DISPATCH, [$ serviceManager-> get (Listener \ DispatchListener :: class), 'onDispatch']);' –

Смежные вопросы