2009-11-14 16 views
6

के साथ ज़ेंड एप्लिकेशन प्रदान करने का "सही" तरीका क्या है मान लें कि आप ZendApplication के सम्मेलनों के साथ बारीकी से ध्यान दे रहे हैं, तो आप एप्लिकेशन डेवलपर्स तक पहुंचने के लिए डेटाबेस हैंडलर कहां स्थापित कर रहे हैं?डाटाबेस हैंडलर

मुझे पता है कि ZendDb एडाप्टर कैसे सेट अप करें। मैं जो जानना चाहता हूं, ज़ेंड फ्रेमवर्क के संदर्भ में, डेवलपर्स को अपने डीबी हैंडलर को कैसे चालू करना चाहिए, इसलिए उन्हें एक अनुरोध में एकाधिक तत्कालताओं की चिंता करने की ज़रूरत नहीं है, प्रत्येक बार प्रमाण पत्र की आपूर्ति करना आदि।

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

$this->db->query(.... 

इस सम्मेलन के ज़ेंड समकक्ष क्या है? स्पष्ट होने के लिए, मैं ज़ेंड फ्रेमवर्क प्रदान करने वाले टूल का उपयोग करके इसे पूरा करने के लिए आधे दर्जन तरीके से सोच सकता हूं। मैं जो खोज रहा हूं वह यह है कि सामान्य मामले में ज़ेंड फ्रेमवर्क, आपको यह करना चाहता है।

उत्तर

18

विचार है कि अपने बूटस्ट्रैप एक कॉन्फ़िग फ़ाइल पढ़ता है और आप config प्रविष्टियों की घोषणा डेटाबेस एडाप्टर आप बनाना चाहते हैं का वर्णन करने के लिए है:

[bootstrap] 
resources.db.adapter = Pdo_Mysql 
resources.db.params.dbname = "mydatabase" 
resources.db.params.username = "webuser" 
resources.db.params.password = "XXXX" 
resources.db.isDefaultTableAdapter = true 

आप सही सम्मेलन निम्नलिखित config कुंजियों का उपयोग करें, तो यह अपने संकेत Zend_Application_Resource_Db ऑब्जेक्ट बनाने और प्रारंभ करने के लिए बूटस्ट्रैप बेस क्लास, और इसे bootstrap resource registry में संग्रहीत करता है।

बाद में आपके नियंत्रक में, आप संसाधन रजिस्ट्री तक पहुंच सकते हैं। नोट: मैंने इसे और अधिक परीक्षण करने के बाद इस कोड को संपादित किया है।

class SomeController extends Zend_Controller_Action 
{ 
    public function init() 
    { 
     $bootstrap = $this->getInvokeArg("bootstrap"); 
     if ($bootstrap->hasPluginResource("db")) { 
      $dbResource = $bootstrap->getPluginResource("db"); 
      $db = $dbResource->getDbAdapter(); 
     } 
    } 
} 

वैकल्पिक रूप से, आप डिफ़ॉल्ट Zend_Registry में एक वस्तु को बचाने के लिए अपने बूटस्ट्रैप कक्षा में एक कस्टम init विधि लिख सकते हैं,:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initDb() 
    { 
    if ($this->hasPluginResource("db")) { 
     $dbResource = $this->getPluginResource("db"); 
     $db = $dbResource->getDbAdapter(); 
     Zend_Registry::set("db", $db); 
    } 
    } 
} 

अब आप के बजाय एक कदम में अपने डाटाबेस वस्तु का उपयोग कर सकते तीन :

class SomeController extends Zend_Controller_Action 
{ 
    public function init() 
    { 
     $db = Zend_Registry::get("db"); 
    } 
} 

व्यक्तिगत रूप से, मैं दूसरी तकनीक का उपयोग करूंगा, क्योंकि तब मुझे अपने बूटस्ट्रैप में केवल एक बार संसाधन रजिस्ट्री का उपयोग करना होगा। पहले उदाहरण में मुझे कोड के उसी ब्लॉक को मेरे सभी नियंत्रकों को कॉपी करना होगा।

+1

मैंने मतदान किया क्योंकि रजिस्ट्री में डीबी डालना एक बुरा अभ्यास है। आपको Zend_Controller_Action का विस्तार करना चाहिए और संरक्षित संपत्ति के रूप में बूटस्ट्रैप से डीबी प्राप्त करना चाहिए। – venimus

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