laminas-modulemanager icon indicating copy to clipboard operation
laminas-modulemanager copied to clipboard

module manager listeners order

Open weierophinney opened this issue 5 years ago • 0 comments

i was installed two module moduleA and moduleB

application.config.php :
'modules' => array (
				'moduleA',
				'moduleB',
		),

when i try to override a service of moduleA serviceA from moduleB serviceB , it was unsuccessful .

moduleA:

module.conf.php:
       service_manager=>[ ... 'serviceA' => 'serviceAFactory' ... ]

module.php:
      onBootstrap(){ ... $serviceManager->get('serviceA') ... }
moduleB:

module.php:
      getServiceConfig(){ return ... [ ... 'serviceA' => 'serviceBFactory' ... ] ;}

Code to reproduce the issue

because module listeners called in this order

https://framework.zend.com/manual/2.4/en/modules/zend.module-manager.module-manager.html . . . Zend\ModuleManager\Listener\ConfigListener Zend\ModuleManager\Listener\InitTrigger Zend\ModuleManager\Listener\LocatorRegistrationListener Zend\ModuleManager\Listener\ModuleResolverListener Zend\ModuleManager\Listener\OnBootstrapListener Zend\ModuleManager\Listener\ServiceListener . . .

its means moduleB can not override a service by providing moduleB->getServiceConfig() on bootstrapEvent and have to define service in moduleB->getConfig() to be able override a service from moduleA ,before it call on bootstrap(). actually service manager configured in tow separated place that is not get same result.

Expected results

is it not better to call Zend\ModuleManager\Listener\ServiceListener after Zend\ModuleManager\Listener\ConfigListener to be usable in Bootstrap !?


Originally posted by @Baft at https://github.com/zendframework/zend-modulemanager/issues/81

weierophinney avatar Dec 31 '19 21:12 weierophinney