Here is my config within my 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;
},
),
),
Here is the problem. As you can see I create a new MasterSlaveFeature Db Instance
every time I call the servicemanager for the masterSlaveFeature
service.
I was thinking that a solution could be using the service manager to handle the MasterSlaveFeature Db Instance
but how do I pass the cloneddb adapter
to the service manager for loading the instance with the adapter?
I was thinking about making a new service that handles loading the MasterSlaveFeature instance.
First of all you don't need to clone adapter.
Second, service manager uses shared instances by default, meaning consecutive call will return previously created instance, unless you specify in config instance is not shared.
As for what you want to achieve, you should define alias, eg db_slave_adapter
and use that alias to fetch 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;
},
),
),
Define alias in your application level configuration:
'service_manager' => array(
'aliases' => array(
'db_slave_adapter' => 'Zend\Db\Adapter\Adapter'
),
),
when you will have real slave adapter, you will replace alias with adapter factory