zend-mvc icon indicating copy to clipboard operation
zend-mvc copied to clipboard

The mvc event listener invalid for namespace if it's multi segment namespaces

Open leogitpro opened this issue 7 years ago • 3 comments

There is a question for me. On a module, Like the path: module/Application, module/Admin, etc... Most of time. the module namespace is use: Application\, Admin\, and now I want make a module is common module for other project. So I rename the namespace to: Brand\Admin\ replace the old Admin\ like this. And then. the question is happened. I tracking all the script flow. The event manager just register the auto namespace first segment for the event identifier. Like the Brand\Admin\ registered in the identifiers is Brand So I register listener on a module's onBootstrap() can not been called.

Code to reproduce the issue

namespace Brand\Admin
class Module {
//.... other code
public function onBootstrap(MvcEvent $event) {

        $sharedEventManager = $event->getApplication()->getEventManager()->getSharedManager();
        $sharedEventManager->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH, function ($e) {
            echo '<h1>Hello, Baby!</h1>';
        }, 9999);
        // The will be ok. the eventmanager auto register identifier AbstractActionController
        //$sharedEventManager->attach(Zend\Mvc\Controller\AbstractActionController::class, MvcEvent::EVENT_DISPATCH, function ($e) {
            //echo '<h1>Hello, Baby!</h1>';
        //}, 9999);
        // Or not use shared event manager, use eventManger is OK.
    }
}

Expected results

the never output hello, baby.

Actual results

The listener never been called.

leogitpro avatar Feb 14 '18 04:02 leogitpro

I debug the EventManager->triggerListeners() method. The class identifiers attribute include the followed ids.

Array (   [0] => Zend\Mvc\Controller\AbstractController   [1] => Application\Controller\IndexController   [2] => Application // Notice there, if visit admin module. There will been: Brand, not expected: Brand\Admin   [3] => Zend\Mvc\InjectApplicationEventInterface   [4] => Zend\EventManager\EventsCapableInterface   [5] => Zend\EventManager\EventManagerAwareInterface   [6] => Zend\Stdlib\DispatchableInterface   [7] => Zend\Mvc\Controller\AbstractActionController ) Who can tell me the module namespace where, when added to the event manager identifiers? Thanks so much.

leogitpro avatar Feb 14 '18 04:02 leogitpro

#282 Should fix this

Xerkus avatar Feb 17 '19 03:02 Xerkus

This repository has been closed and moved to laminas/laminas-mvc; a new issue has been opened at https://github.com/laminas/laminas-mvc/issues/14.

weierophinney avatar Dec 31 '19 21:12 weierophinney