zend-mvc
zend-mvc copied to clipboard
The mvc event listener invalid for namespace if it's multi segment namespaces
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.
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.
#282 Should fix this
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.