Использование ZF2 ServiceManager для обработки MasterSlaveFeature

Вот мой конфиг в моем Application module.config.php:

            'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
'masterSlaveFeature' => function($sm){
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$slaveAdapter = clone $dbAdapter;
$feature = new Zend\Db\TableGateway\Feature\MasterSlaveFeature($slaveAdapter);
return $feature;
},
),
),

Здесь проблема. Как видите, я создаю новый MasterSlaveFeature Db Instance каждый раз, когда я звоню masterSlaveFeature оказание услуг.

Я думал, что решением может быть использование менеджера сервисов для обработки MasterSlaveFeature Db Instance но как мне передать клонированныйdb adapter диспетчеру службы для загрузки экземпляра с помощью адаптера?

Я думал о создании нового сервиса, который обрабатывает загрузку экземпляра MasterSlaveFeature.

0

Решение

Прежде всего вам не нужно клонировать адаптер.

Во-вторых, диспетчер служб использует общие экземпляры по умолчанию, что означает, что последовательный вызов возвратит ранее созданный экземпляр, если вы не укажете, что в экземпляре конфигурации не используется общий доступ.

Что касается того, что вы хотите достичь, вы должны определить псевдоним, например, db_slave_adapter и используйте этот псевдоним для получения адаптера:

'service_manager' => array(
'factories' => array(
'masterSlaveFeature' => function($sm){
$dbAdapter = $sm->get('db_slave_adapter');
$feature = new Zend\Db\TableGateway\Feature\MasterSlaveFeature($dbAdapter);
return $feature;
},
),
),

Определите псевдоним в вашей конфигурации уровня приложения:

'service_manager' => array(
'aliases' => array(
'db_slave_adapter' => 'Zend\Db\Adapter\Adapter'
),
),

когда у вас будет настоящий подчиненный адаптер, вы замените псевдоним на заводской адаптер

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]