2012-11-01 9 views
7

में क्रॉस कंट्रोलर वेरिएबल्स मेरा कोड DRY रखने के प्रयास में मैं "क्रॉस कंट्रोलर" चर परिभाषित करने में सक्षम होना चाहता हूं।फाल्कन

क्लासिक उदाहरण यह है कि मैं अपने बूटस्टैप में लोड की गई कुछ कॉन्फ़िगरेशन आइटम्स तक पहुंच चाहता हूं।

इसे प्राप्त करने का सबसे अच्छा अभ्यास तरीका क्या है?

टिम

उत्तर

7

तुम हमेशा Di कंटेनर का उपयोग कर सकते हैं।

एक बार जब आप डि में एक घटक पंजीकृत करते हैं तो यह जादू विधि द्वारा नियंत्रक में उपलब्ध होता है। उदाहरण के लिए:

// Bootstrap 
$configFile = ROOT_PATH . '/app/config/config.ini'; 

// Create the new object 
$config = new \Phalcon\Config\Adapter\Ini($configFile); 

// Store it in the Di container 
$this->di->setShared('config', $config); 

और अपने नियंत्रक में यह उतना ही आसान है के रूप में:

$config = $this->config; 

आप एक आधार नियंत्रक वर्ग बनाते हैं, तो आप उन वस्तुओं को ध्यान में रखते यदि ऐसा है तो तरह की जरूरत पारित कर सकते हैं:

$this->view->setVar('config', $this->config); 

अंत में डि कंटेनर एक रजिस्ट्री के रूप में भी कार्य कर सकता है, जहां आप अपने एप्लिकेशन में उन वस्तुओं को स्टोर कर सकते हैं जिन्हें आप उपयोग करना चाहते हैं।

बूटस्ट्रैपिंग और नियंत्रकों में ऑब्जेक्ट्स तक पहुंचने के उदाहरण के लिए, phalcon/website रिपोजिटरी पर एक नज़र डालें। यह अन्य चीजों के साथ बूटस्ट्रैपिंग और बेस कंट्रोलर पैटर्न लागू करता है।

+2

इसके लिए धन्यवाद! वास्तव में अच्छी तरह से काम करता है – Tim

+1

मुझे पता है कि मैं थोड़ा देर हो चुकी हूं, लेकिन इस परिदृश्य में आप $ di-> set() $ di-> setShared() से अधिक क्यों उपयोग करेंगे? – Mechzeit

+0

@Spinkzeit 'setShared' यहां बेहतर उपयोग हो सकता है - आप सही हैं - चूंकि '$ config' वास्तव में पूरे ऐप में उपयोग किया जाता है और साझा ऑब्जेक्ट होना आवश्यक है। मैंने तदनुसार अपना जवाब बदल दिया है, धन्यवाद! –

2

मेरा सेटअप निम्न है।

[PHP]  5.4.1 
[phalcon] 1.2.1 

यहाँ मेरी बूटस्ट्रैप से एक अंश है। (/ एप्लिकेशन-रूट/सार्वजनिक/index.php)

$di = new \Phalcon\DI\FactoryDefault(); 

    // I'll pass the config to a controller. 
    $di->set('config', $config); 

    $application = new \Phalcon\Mvc\Application(); 
    $application->setDI($di); 
    echo $application->handle()->getContent(); 

और ये मेरे आधार नियंत्रक से एक अंश है। (/ एप्लिकेशन-जड़/ऐप/नियंत्रक/नियंत्रकबेस.एफ़पी)

class ControllerBase extends Phalcon\Mvc\Controller 
    { 
      protected $config; 

      protected function initialize() 
      { 
        $this->config = $this->di->get('config'); 
        $appName  = $this->config->application->appName; 
+0

अच्छा संदर्भ - और: क्या यह प्रश्न हल करता है :-) – kleopatra

+0

धन्यवाद। हाँ, वह करता है। – Sankame