ZF2

2013-05-23 8 views
5

पर बहु ​​डीबी कनेक्शन कॉन्फ़िगर करें मैं वास्तव में ZF2 में एक नौसिखिया हूं, मैं उसी एप्लिकेशन पर एकाधिक बीडीडी का उपयोग करने में कामयाब रहा और यह काम करता है। (मैं इसके बारे में बात कर रहा हूं: configure multiple databases in zf2)।ZF2

हालांकि, मैं एक छोटे से सवाल होगा ...

यह global.php में अपने कस्टम कारखाने की घोषणा करने के लिए ठीक है? (service_manager चीज़ में)। या क्या मुझे इसे प्रत्येक मॉड्यूल के अंदर घोषित करने की आवश्यकता है? (Module.php में)

यह global.php में घोषणा वास्तव में काम करता है, लेकिन अगर यह ढांचा या कुछ और की भावना को तोड़ने नहीं कर रहा है मैं सोच रहा था ...

अपना समय के लिए धन्यवाद!

Tounu

उत्तर

7

स्टोर एक स्थानीय config में अपनी कनेक्शन सेटिंग:

config/autoload/local.php 

इस मामले में आप उदाहरण के लिए विभिन्न डेटाबेस/कनेक्शन साख आदि के साथ कई वातावरण है, तो आप एक मचान सेटअप दिया हो सकता है , और एक अलग डेटाबेस का उपयोग कर दोनों एक लाइव सेटअप। फिर भी आप अपने आवेदन के अंदर कई कनेक्शन का भी उपयोग कर सकते हैं।

तुम यहाँ में एक से अधिक कनेक्शन की स्थापना को रोकने के लिए कुछ भी नहीं है, और उन्हें प्रयोग के रूप में अपने डेटाबेस एडाप्टर आदि में आवश्यक

local.php

return array(
    /** 
    * Database Connection One 
    */ 
    'db' => array(
     'driver' => 'pdo', 
     'dsn'  => 'mysql:dbname=dbnamehere;host=localhost', 
     'username' => 'root', 
     'password' => '', 
    ), 
    /** 
    * Database Connection Two 
    */ 
    'db_two' => array(
     'driver' => 'pdo', 
     'dsn'  => 'mysql:dbname=anotherdb;host=localhost', 
     'username' => 'root', 
     'password' => '', 
    ), 

आप संस्करण नियंत्रण उपयोग कर रहे हैं (आपको होना चाहिए!) यह आपको वहां पर पासवर्ड संग्रहीत करने से बचने के लिए अपने भंडार से .local कॉन्फ़िगरेशन फ़ाइलों को बाहर करने की अनुमति देता है, और कई वातावरणों में आसान तैनाती की अनुमति देता है।

आप सेटअप कई एडेप्टर अलग कनेक्शन भी उपयोग कर सकते हैं:

global.php

return array(
    /** 
    * Database Adapter(s) 
    */ 
    'service_manager' => array(
     'factories' => array(
      /** 
      * Adapter One - this factory will use the default 'db' connection 
      */ 
      'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', 
      /** 
      * Adapter Two - use the second connection 
      */ 
      'Application\Db\AdapterTwo' => function($sm) { 
       $config = $sm->get('Config'); 
       return new Adapter($config['db_two']); 
      }, 
     ), 
    ), 
); 
+0

धन्यवाद, इससे मदद मिली! – Tounu

+0

छोटे संपादन - global.php में मुझे कक्षा में पथ जोड़ना होगा: 'नया ज़ेंड \ डीबी \ एडाप्टर \ एडाप्टर ($ config [' db_two '] वापस लौटें); ' – user2047861

2

एक समय में एकाधिक डेटाबेस से कनेक्ट करने के लिए, निम्न चरणों का पालन करें:

चरण 1 :

बनाएँ/मॉड्यूल/MyModule/और जोड़ें access.config.ini में पहुंचने के लिए।

चरण 2: Module.php बनाएं/मॉड्यूल/MyModule/निम्न स्क्रिप्ट के साथ निर्देशिका में

<?php 

    namespace MyModule; 
    use MyModule\MyAdapterFactory; 
    use Zend\ModuleManager\Feature\ServiceProviderInterface; 

    class Module implements ServiceProviderInterface{ 

public function getAutoloaderConfig() 
{  
    return array(
     'Zend\Loader\StandardAutoloader' => array(
      'namespaces' => array(        
       __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__.'/Db/Adapter/', 
      ), 
     ), 
    ); 
} 

public function getServiceConfig() 
{ 
    return array(
     'factories' => array(
      'adapter1' => new MyAdapterFactory('db_adapter1'), 
      'adapter2' => new MyAdapterFactory('db_adapter2'), 
     ),  
    ); 

} 

} 

चरण 3:

रास्ते में MyAdapterFactory.php बनाएँ:/मॉड्यूल/MyModule/src/MyModule/डीबी/एडाप्टर/निम्न स्क्रिप्ट के साथ।

<?php 

    namespace MyModule; 
    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]); 
     } 
     } 

    ?> 

चरण 4:

अपने getServiceConfig में निम्न स्क्रिप्ट जोड़ें()।

   'YourModule\Model\YourTable' => function($sm) { 
       $tableGateway = $sm->get('YourTableGateway'); 
       $table = new YourTable($tableGateway); 
       return $table; 
      }, 
      'YourTableGateway' => function ($sm) { 
       $adapter1 = $sm->get('adapter1');     
       $resultSetPrototype = new ResultSet(); 
       $resultSetPrototype->setArrayObjectPrototype(new YourModel()); 
       return new TableGateway('tbl_name', $adapter1, null,     $resultSetPrototype); 
      }, 

चरण 5:

जोड़ें अपने नियंत्रक में विधि के रूप में नीचे अपनी मेज तक पहुँचने के लिए:

वर्ग की शुरुआत पर इस घोषित:

$ इस- संरक्षित> yourTable ;

public function getYourTable() 
{ 
    if (!$this->yourTable) { 
     $sm = $this->getServiceLocator(); 
     $this->yourTable = $sm->get('YourModule\Model\YourTable'); 
    }  
    return $this->yourTable; 
} 

फिर, आप अपने नियंत्रक में इस समारोह (getYourTable()) का उपयोग करें, अद्यतन, सम्मिलित करें के लिए अपने मॉडल तरीकों कॉल कर सकते हैं।

 संबंधित मुद्दे