Zend Custom Service Manager - PullRequest
       84

Zend Custom Service Manager

0 голосов
/ 11 февраля 2020

Я пытаюсь создать свой собственный менеджер сервисов, чтобы изменить всего несколько строк метода 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 может привести к путанице. Но, похоже, это не так.

...