2011-02-13 19 views
8

मेरे पास एक सवाल है क्योंकि मुझे वैश्विक स्थैतिक चर होना चाहिए और मेरे पास सवाल है कि इसे application.ini फ़ाइल में जोड़ने की कोई संभावना है, इसे कैसे करें?Zend, Application.ini में वैश्विक चर?

या मैं करने के लिए:

  1. स्थिर चर के साथ अमूर्त वर्ग बनाएँ,
  2. Zend_Registry में यह रजिस्टर सभी आवेदन से इस चर का उपयोग करने की (यह बूटस्ट्रैप फ़ाइल में रजिस्टर)
  3. मैं कर सकते हैं इसका इस्तेमाल करें, या आसान है, मेरा मतलब है "स्वचालित तरीका" ऐसा करने के लिए?

सलाह के लिए धन्यवाद! Regars,

+0

कॉन्फ़िगरेशन फ़ाइलों का उपयोग पैरामीटर निर्दिष्ट करने के लिए किया जाता है, जो आपके ऐप के इनपुट के रूप में उपयोग किए जाते हैं lication। PHP ग्लोबल्स का उपयोग करने पर आपको प्रोग्रामेटिक रूप से – Phil

उत्तर

1

आप application.ini में और Bootsrap.php में मान निर्दिष्ट कर सकते हैं और इसे Zend_Registry में सहेज सकते हैं। आप स्थिरांक बनाने के लिए PHP परिभाषा विधि का भी उपयोग कर सकते हैं (यदि आप स्थिर हैं तो स्थिर है)।

+0

+1 कुछ भी नहीं जोड़ना चाहिए। इसलिए एक दृश्य में ज़ेंड स्थैतिक कक्षा के उपयोग की आवश्यकता को छोड़कर। – Alex

6

मेरे लिए सबसे अच्छा समाधान index.php फ़ाइल में एक चर बनाने के लिए था। मैंने जोड़ा है: परिभाषित ('VARIABLE_NAME') || परिभाषित करें ('VARIABLE_NAME', 'यहां कुछ');

और अब मैं इसे हर जगह से एक्सेस कर सकता हूं; डी बहुत बहुत धन्यवाद!

12

Application.ini में दाखिल

someservice.apikey = 12345678 
someservice.passkey = 87654321 

बूटस्ट्रैप में

public function _initSomeservice() 
{ 
    $someservice = $this->getOption('someservice'); 
    Zend_Registry::set('someservice', $someservice); 
} 

रजिस्ट्री

से खींचने के लिए
$config = Zend_Registry::get('someservice'); 
5

मैं दो कारणों के लिए Zend_Registry है और न ही स्थिरांक का उपयोग नहीं होता

  1. रजिस्ट्री में आप कभी भी सुनिश्चित नहीं हैं कि चर के साथ क्या हुआ। आवेदन के हर हिस्से में उन्हें बदल सकते हैं और आपको ध्यान नहीं दिया जाएगा। मैं रजिस्ट्री को वास्तव में एक एनीट-पैटर्न के रूप में देखता हूं।
  2. कॉन्स्टेंट आपके एप्लिकेशन को अनावश्यक रूप से प्रदूषित कर रहे हैं। क्या होगा यदि आप प्रत्येक कॉन्फ़िगरेशन के लिए कुछ निरंतर उपयोग करते हैं? आपको परिभाषित सभी स्थिरांक के साथ एक अतिरिक्त दस्तावेज़ रखना है, यह बनाए रखने के लिए भयानक है।

सबसे अच्छा विकल्प क्या है, सीधे बूटस्ट्रैप से कॉन्फ़िगर ऑब्जेक्ट प्राप्त करना है। अगले उदाहरणों में, मुझे लगता है आप अपनी application.ini में यह है:

someservice.apikey = 12345678 
someservice.passkey = 87654321 

बूटस्ट्रैप frontController में पैरामीटर के रूप में सेट है। आप एक कार्रवाई नियंत्रक है, तो यह यह के रूप में इस के रूप में सरल बनाता है:

$serviceOptions = $this->getInvokeArg('bootstrap')->getOption('someservice'); 

आप एक सेवा के लिए अपने नियंत्रक में instantiated है, तो आप अब उन पर निर्माता और/या सेटर के माध्यम से पारित कर सकते हैं।

यदि आप अपने नियंत्रक के भीतर विकल्प नहीं प्राप्त करना चाहते हैं, लेकिन कहीं और, आप सिंगलटन पैटर्न को फ्रंटकंट्रोलर उपकरण का उपयोग कर सकते हैं।किसी भी स्थान पर तो (जाहिर है केवल, भेजने नहीं बूटस्ट्रैप के दौरान ही के दौरान) यदि आप ऐसा करने में समर्थ हैं: उपरोक्त विधि के साथ

$frontController = Zend_Controller_Front::getInstance(); 
$serviceOptions = $frontController->getParam('bootstrap') 
            ->getOption('someservice'); 

आप कर रहे हैं सुरक्षित आप हमेशा सही विन्यास विकल्प और नहीं कुछ संभवतः है एक उत्परिवर्तित।

+0

यही वह है जिसे मैं ढूंढ रहा था! धन्यवाद! – VishwaKumar

0

मैंने अभी परिभाषित किया है ('VARIABLE_NAME', 'कुछ यहाँ'); बूटस्ट्रैप करने के लिए। तत्काल वैश्विक स्थिरांक।

इन स्थिरांक बूटस्ट्रैप के अंदर एक संरक्षित _intiFuncName समारोह के अंदर रखा गया था वर्ग

0

फैली मैं application.ini में निम्नलिखित नामकरण सम्मेलन के साथ स्थिरांक की एक श्रृंखला है:

system.image_path = "/assets/images" 
system.custom_path = "/assets/custom" 
system.cdn_URL  = "http://cdnurl.com" 

और मैं सिर्फ उन्हें मेरे कोड में संदर्भित करें जैसे कि वे PHP स्थिरांक थे:

SYSTEM_IMAGE_PATH 
SYSTEM_CUSTOM_PATH 
SYSTEM_CDN_URL 
संबंधित मुद्दे