2010-06-03 18 views
19
protected function _initDatabase() 
{ 
    $params = array(
      'host'  => '', 
      'username' => '', 
      'password' => '', 
      'dbname' => '', 
     ); 

    $database = Zend_Db::factory('PDO_MYSQL', $params); 
    $database->getConnection(); 
    return $database; 
} 

में नियंत्रक प्लगइन में बूटस्ट्रैप संसाधन कैसे प्राप्त करें।ज़ेंड फ्रेमवर्क

class App_Controller_Plugin_Test extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Http $request) 
    { 
     // how i get database? 

    } 
} 

उत्तर

31

तुम हमेशा सामने नियंत्रक के लिए एक संदर्भ प्राप्त कर सकते हैं:

$front = Zend_Controller_Front::getInstance(); 

से आप बूटस्ट्रैप प्राप्त कर सकते हैं कि:

$bootstrap = $front->getParam("bootstrap"); 

बूटस्ट्रैप से आप बूटस्ट्रैप प्लगइन्स प्राप्त कर सकते हैं:

if ($bootstrap->hasPluginResource("database")) { 
     $dbResource = $bootstrap->getPluginResource("database"); 
} 
$db = $dbResource->getDatabase(); 

लेकिन यह बहुत अधिक नलसाजी है!

protected function _initDatabase() 
{ 
    $params = array(
      'host'  => '', 
      'username' => '', 
      'password' => '', 
      'dbname' => '', 
     ); 

    $database = Zend_Db::factory('PDO_MYSQL', $params); 
    $database->getConnection(); 
    Zend_Registry::set("database", $database); 
    return $database; 
} 

तो फिर तुम कहीं भी डेटाबेस एडाप्टर प्राप्त कर सकते हैं:

ईमानदारी से, आप अपने बूटस्ट्रैप दौरान रजिस्ट्री में डेटाबेस एडाप्टर वस्तु भंडारण बेहतर होगा

Zend_Registry::get("database"); 

भी देखें मेरी What is the “right” Way to Provide a Zend Application With a Database Handler

+0

मेरे मामले में getResource ("db") क्यों काम करता है और संसाधन ("डेटाबेस") नहीं मिलता है? –

+1

यह आपके बूटस्ट्रैप कॉन्फ़िगरेशन फ़ाइल में आपके द्वारा लिखे गए संसाधन नाम के अनुसार केवल एक कुंजी का उपयोग करता है। उदाहरण के लिए यदि 'config.db' के साथ अपने कॉन्फ़िगर पैराम का उपसर्ग करें तो यह 'db' का उपयोग करेगा। –

5

[मुझे इसे किसी अन्य मशीन पर कुछ काम करने वाले कोड के विरुद्ध जांचना होगा। मेरा मानना ​​है कि यह कुछ इस तरह है ...]

$db = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('db'); 
6

बहुत बुरा कोई प्लगइन में Zend_Controller_Action के getInvokeArg("bootstrap") जैसे कुछ भी नहीं है।

$db = Zend_Controller_Front::getInstance()->getParam("bootstrap")->getResource("database"); 

लेकिन क्या मैं आमतौर पर करते हैं

Zend_Registry::set('database', $database); 

और फिर अपने प्लगइन में है:: आप हमेशा सामने नियंत्रक के माध्यम से बूटस्ट्रैप संदर्भ मिल सकता है

try 
{ 
    $db = Zend_Registry::get('database'); 
} 
catch (Zend_Exception $e) 
{ 
    // do stuff 
} 

आसान है, और डेटाबेस कर सकते हैं आवेदन में कहीं भी कहीं भी पुनः प्राप्त किया जा सकता है।

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