दिलचस्प पोस्ट
आप iOS ऐप्लिकेशन में इन-ऐप खरीदारी कैसे जोड़ सकते हैं? मैं सूची <टी> से लेकर एक वर्ग के सदस्यों को क्रमबद्ध करने के लिए json.net कैसे प्राप्त करूं? कई एचटीएमएल टेम्प्लेट फाइलों के साथ एक बड़े उल्का अनुप्रयोग को संरचित करने के लिए सर्वोत्तम प्रथाएं क्या हैं? एनोटेट मैपिंग के साथ मैं स्प्रिंग एमवीसी के मामले में असंवेदनशील यूआरएल कैसे कर सकता हूं? $ State.transitionTo () और $ state.go () के बीच में कांस्यर ui-router में अंतर सी ++ में सेटपरिसिस का उपयोग कैसे करें जावास्क्रिप्ट वर्ग पर ईवेंट श्रोता पर क्लिक करें मेवेन स्कोप के बीच का अंतर संकलन और जेआर पैकेजिंग के लिए प्रदान किया गया है MVC- पॉप अप विंडो जार पुस्तकालयों को एंड्रॉइड-स्टूडियो में आयात करना कैसे नेविगेशन वापस प्रतीक और नेविगेशन वापस पाठ को अनुकूलित करने के लिए? Django: एक टेम्प्लेट में कई टेम्पलेट फ़ॉर्म का उपयोग करते हैं जावास्क्रिप्ट में मैं एक फाइल इन्पुट तत्व के लिए "क्लिक" ईवेंट फ़ायर प्रोग्राम बना सकता हूं? वीएएस 2012 में वैरायडिक टेम्पलेट (विज़ुअल सी ++ नवंबर 2012 सीटीपी) नामांकित पैरामीटर के साथ मूल क्वेरी "असल में सभी नामित पैरामीटर सेट नहीं किए गए हैं" के साथ विफल रहता है

zf2 में एकाधिक डेटाबेस कॉन्फ़िगर करें

मैं कैसे ज़ेंड फ्रेमवर्क 2 में एकाधिक डेटाबेस को कॉन्फ़िगर कर सकता हूं (और उपयोग कर सकता हूं)? वर्तमान में मेरे पास यह मेरे global.php में है:

return array( 'db' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=my_db;host=localhost', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ), 'username' => 'user', 'password' => '******', ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', ), ), ); 

लेकिन मुझे एक दूसरे को जोड़ने का एक तरीका दिखाई नहीं देता I

Solutions Collecting From Web of "zf2 में एकाधिक डेटाबेस कॉन्फ़िगर करें"

यदि आप ज़ेंड \ डीबी \ एडाप्टर \ एडॉप्टरसेसेफफिचर को देखते हैं, तो आप देखेंगे कि आपका एडेप्टर कॉन्फिगरेशन सिर्फ एक ही कुंजी '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]); } } 

अपने मुख्य मॉड्यूल (या कोई अन्य एक) में, एडेंडर्स कारखानों को ज़ेंड सेवा प्रबंधक को घोषित करने के लिए निम्न मॉड्यूल.php फ़ाइल में जोड़ें:

 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'), ), ); } //... 

वैश्विक कॉन्फ़िग को अब दिखना चाहिए:

 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'); 

एक प्रदर्शन परिप्रेक्ष्य से यह दूसरा दृष्टिकोण बेहतर होता है: एक ऑब्जेक्ट को तत्काल (अमूर्त फैक्ट्री) (संभवतः) से अलग एडेप्टर बनाना होगा। जबकि पिछले दृष्टिकोण में, एक ऑब्जेक्ट प्रति कॉन्फ़िगरेशन बनाया गया था।

मुझे https://samsonasik.wordpress.com/2013/07/27/zend-framework-2-multiple-name-db-adapter-instances-using-adapters-subkey/ पर बेहतर व्याख्यान मिले

ज़ेंड फ़्रेमवर्क 2.2 सार के साथ आता Zend\Db\Adapter\AdapterAbstractServiceFactory जो हमें कई नामित DB एडाप्टर इंस्टेंसेस कॉन्फ़िगर करने की अनुमति देता है। यह करने के लिए कदम से कदम है:

  1. 'सेवा_ व्यवस्थापक' कुंजी के तहत 'abstract_factories' प्रकार पर Zend\Db\Adapter\AdapterAbstractServiceFactory पंजीकृत करें

    //config/autoload/global.php // …. config / autoload / global.php 'service_manager' => सरणी के भाग ('abstract_factories' => सरणी ('ज़ेंड \ डीबी एडेप्टर एडैप्टरएब्रास्टसेवाएफ़ेन्टर',), ),

  2. config/autoload/global.php पर 'डीबी' कुंजी के तहत 'एडेप्टर' उपकुंजी को config/autoload/global.php

//config/autoload/global.php // …. config / autoload / global.php का हिस्सा

 'db' => array( 'adapters' => array( 'db1' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=zf2_staging;host=localhost', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ), ), 'db2' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=zf2_test;host=localhost', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ), ), ), ), 
  1. config/autoload/local.php पर ' config/autoload/local.php ' कुंजी के तहत 'एडेप्टर' उपकुंजी को config/autoload/local.php

//config/autoload/local.php

 return array( 'db' => array( 'adapters' => array( 'db1' => array( 'username' => 'root', 'password' => '', ), 'db2' => array( 'username' => 'other_user', 'password' => 'other_user_passwd', ), ), ), ); 
  1. कॉल एडाप्टर 'db1' या 'db2' के रूप में सेवा प्रबंधक से डीबी एडाप्टर के रूप में

    $ Sm-> प्राप्त ( 'DB1');

    $ Sm-> प्राप्त ( 'डीबी 2');

यदि आपको प्राथमिक एडाप्टर, 'डीबी 1' और 'डीबी 2' के रूप में विशिष्ट अनुकूलन के लिए अन्य एडाप्टर के रूप में $sm->get('Zend\Db\Adapter\Adapter') db / adapter' adapter $sm->get('Zend\Db\Adapter\Adapter') प्राप्त करने की आवश्यकता है, तो आपको डीबी के तहत सीधे प्राथमिक एडाप्टर को परिभाषित करने की आवश्यकता है, इसलिए config/autoload/global.php का config/autoload/global.php निम्नलिखित की तरह होगा:

//config/autoload/global.php

 return array( 'db' => array( //this is for primary adapter.... 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=zf21_learn;host=localhost', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ), //other adapter when it needed... 'adapters' => array( 'db1' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=zf2_staging;host=localhost', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ), ), 'db2' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=zf2_test;host=localhost', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ), ), ), ), 'service_manager' => array( // for primary db adapter that called // by $sm->get('Zend\Db\Adapter\Adapter') 'factories' => array( 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', ), // to allow other adapter to be called by // $sm->get('db1') or $sm->get('db2') based on the adapters config. 'abstract_factories' => array( 'Zend\Db\Adapter\AdapterAbstractServiceFactory', ), ), ); 

config/autoload/global.local.php को निम्न की तरह कॉन्फ़िगर किया जाना चाहिए:

//config/autoload/local.php

 return array( 'db' => array( // for primary db adapter that called // by $sm->get('Zend\Db\Adapter\Adapter') 'username' => 'root', 'password' => '', // to allow other adapter to be called by // $sm->get('db1') or $sm->get('db2') based on the adapters config. 'adapters' => array( 'db1' => array( 'username' => 'root', 'password' => '', ), 'db2' => array( 'username' => 'other_user', 'password' => 'other_user_passwd', ), ), ), );