Я пытаюсь создать свой собственный менеджер сервисов, чтобы изменить всего несколько строк метода doCreate () стандартного менеджера сервисов Zend. Я бы хотел, чтобы этот пользовательский менеджер переопределял стандартный менеджер, поэтому я хочу, чтобы он использовал тот же ключ конфигурации, что и стандартный менеджер. Дырочный код моего класса ServiceManager копируется частными методами стандартного Zend ServiceManager с добавлением нескольких строк собственного кода. Мой ServiceManager расширяет AbstractPluginManager, а ServiceManagerFactory расширяет AbstractPluginManagerFactory, предоставляя только const с именем класса ServiceManager. Я добавил следующие строки в application.config. php:
'service_listener_options' => array(
array(
'service_manager' => ServiceManager::class,
'config_key' => 'service_manager',
'interface' => '',
'method' => ''
),
),
'service_manager' => array(
'invokables' => array('ServiceManager' => ServiceManagerFactory::class)
И дело в том, что это вообще не работает, Zend все еще использует стандартный ServiceManager. Я не понимаю эту конфигурацию, документация действительно загадочная c, можете ли вы помочь мне сделать то, что я хотел? РЕДАКТИРОВАТЬ: Я изменил application.config. php на это:
'service_listener_options' => array(
array(
'service_manager' => 'CustomServiceManager',
'config_key' => 'service_manager',
'interface' => '',
'method' => ''
),
),
'service_manager' => array(
'invokables' => array('CustomServiceManager' => CustomServiceManagerFactory::class)
, и теперь я получаю следующую ошибку:
Fatal error: Uncaught Zend\ModuleManager\Listener\Exception\RuntimeException:
Could not find a valid ServiceManager for CustomServiceManager in C:\inetpub\wwwroot\application_30005\vendor\zendframework\zend-modulemanager\src\Listener\ServiceListener.php:208
Stack trace:
#0 C:\inetpub\wwwroot\application_30005\vendor\zendframework\zend-eventmanager\src\EventManager.php(322): Zend\ModuleManager\Listener\ServiceListener->onLoadModulesPost(Object(Zend\ModuleManager\ModuleEvent))
#1 C:\inetpub\wwwroot\application_30005\vendor\zendframework\zend-eventmanager\src\EventManager.php(171): Zend\EventManager\EventManager->triggerListeners(Object(Zend\ModuleManager\ModuleEvent))
#2 C:\inetpub\wwwroot\application_30005\vendor\zendframework\zend-modulemanager\src\ModuleManager.php(127): Zend\EventManager\EventManager->triggerEvent(Object(Zend\ModuleManager\ModuleEvent))
#3 C:\inetpub\wwwroot\application_30005\vendor\zendframework\zend-mvc\src\Application.php(264): Zend\ModuleManager\ModuleManager->loadModules()
#4 C:\inetpub\wwwroot\app in C:\inetpub\wwwroot\application_30005\vendor\zendframework\zend-modulemanager\src\Listener\ServiceListener.php on line 208
Конечно, я изменил имена классов из-за мысли, что использование имени ServiceManager может привести к путанице. Но, похоже, это не так.