यदि आप ज़ेंड \ डीबी \ एडाप्टर \ एडाप्टर सेवा सेवा को देखते हैं, तो आप देखेंगे कि आपका एडाप्टर कॉन्फ़िगरेशन केवल एक कुंजी 'db'
पर इंगित करता है। जिसका अर्थ यह है कि एडाप्टर जो बनाता है वह हमेशा इस (अद्वितीय) कॉन्फ़िगरेशन कुंजी का उपयोग करेगा। ,
namespace Your\Namespace;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\Db\Adapter\Adapter;
class MyAdapterFactory implements FactoryInterface
{
protected $configKey;
public function __construct($key)
{
$this->configKey = $key;
}
public function createService(ServiceLocatorInterface $serviceLocator)
{
$config = $serviceLocator->get('Config');
return new Adapter($config[$this->configKey]);
}
}
आपका मुख्य मॉड्यूल में (या किसी अन्य एक) एडेप्टर कारखानों घोषित करने के लिए Module.php फाइल करने के लिए निम्नलिखित जोड़ें:
मैं आप अपने खुद के कारखाने कि इस प्रकार दिखाई देगा बनाने के लिए सलाह देते हैं Zend सेवा प्रबंधक के लिए:
use Your\Namespace\MyAdapterFactory;
use Zend\ModuleManager\Feature\ServiceProviderInterface;
class Module implements ServiceProviderInterface{
//Previous code
public function getServiceConfig()
{
return array(
'factories' => array(
'myadapter1' => new MyAdapterFactory('dbconfigkey1'),
'myadapter2' => new MyAdapterFactory('dbconfigkey2'),
),
);
}
//...
वैश्विक config अब दिखना चाहिए:
return array(
'dbconfigkey1' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=my_db;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
'username' => 'user',
'password' => '******',
),
'dbconfigkey2' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=my_db2;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
'username' => 'user',
'password' => '******',
),
);
एडाप्टर आप सेवा प्रबंधक का उपयोग कर उन्हें कॉल करने की आवश्यकता का उपयोग करें:
$adapter1=$serviceManager->get('myadapter1');
$adapter2=$serviceManager->get('myadapter2');
संस्करण के रूप में 2.2
एक तत्व सेवा फैक्टरी अब zf2 Zend \ Db मॉड्यूल का हिस्सा है। यह एडेप्टर 'उप-कुंजी के अंतर्गत गुणकों विन्यास कुंजी जोड़ना संभव है:
'db'=> array(
'adapters'=>array(
'adapter' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=test;host=localhost',
'username' => 'readCredential',
'password' => '****'
),
'adapter2' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=test;host=localhost',
'username' => 'rwCredential',
'password' => '****'
),
)
),
हालांकि, AbstractServiceFactory जरूरत "मैन्युअल" जोड़े जाने के लिए के रूप में यह तो डिफ़ॉल्ट रूप से नहीं है:
'service_manager' => array(
'abstract_factories' => array(
'Zend\Db\Adapter\AdapterAbstractServiceFactory',
)
),
एडेप्टर पहले के रूप में सुलभ हैं:
$adapter1=$serviceManager->get('adapter');
$adapter2=$serviceManager->get('adapter2');
एक प्रदर्शन के नजरिए यह दूसरा दृष्टिकोण है से बेहतर: एक वस्तु के लिए (संभावित) मूल्य बना (सार कारखाना) instantiated हो जाएगा ई विभिन्न एडाप्टर। जबकि पिछले दृष्टिकोण में, प्रति कॉन्फ़िगरेशन एक ऑब्जेक्ट बनाया गया था।
2,1 में बदल रणनीति इस तरह का है? – Saeven
ज़ेंड \ डीबी \ एडाप्टर \ AdapterServiceFactory पर त्वरित रूप से देखने के बाद मुझे ऐसा नहीं लगता है। – yechabbi
अच्छा 2.2 जानकारी, धन्यवाद। – Xunnamius