2013-07-30 6 views
5

ZF1 में मैं application.iniZF2 कैसे ध्यान में रखते हुए वैश्विक चर का उपयोग करने के

brandname = "Example" 
weburl = "http://www.example.com/" 
assetsurl = "http://assets.example.com/" 

में चर घोषित करने के लिए प्रयोग किया जाता है और बूटस्ट्रैप में मैं इस तो मैं उन्हें ध्यान में रखते हुए यहां पहुंच सकता है किया

define('BRANDNAME', $this->getApplication()->getOption("brandname")); 
define('WEBURL', $this->getApplication()->getOption("weburl")); 
define('ASSETSURL', $this->getApplication()->getOption("assetsurl")); 

क्या ZF2 तरीका यह है, मुझे पता है कि मैं की तरह local.php कॉन्फ़िग फ़ाइल में एक सरणी बना सकते हैं:

return array(
    'example' => array(
     'brandname' => 'Example', 
     'weburl' => 'http://www.example.com/', 
     'asseturl' => 'http://assets.example.com/', 
    ), 
); 

जब मैं नियंत्रक में है कि चर रहा

$config = $this->getServiceLocator()->get('Config'); 
$config['example']['brandname']); 

अब तक तो अच्छा कर सकते हैं का उपयोग करना चाहते हैं ... लेकिन मैं कैसे ध्यान में रखते हुए इस चर उपयोग करते हैं? मैं प्रत्येक नियंत्रक में इसके लिए एक व्यू वैरिएबल नहीं बनाना चाहता हूं। और जब मैं उपरोक्त कोशिश करता हूं तो एक फ़ाइल में मुझे एक त्रुटि मिलती है।

Zend\View\HelperPluginManager::get was unable to fetch or create an instance for getServiceLocator 

कोई विचार?

+0

कोड – Andrew

+0

कोड की कुछ पंक्तियों में अपने कॉन्फ़िगरेशन विकल्पों के शॉर्टकट के रूप में कार्य करने के लिए आप एक साधारण दृश्य सहायक बना सकते हैं, आपको यह त्रुटि मिल रही है क्योंकि 'getServiceLocator' नाम का कोई सहायक सहायक नहीं है। – Andy0708

उत्तर

6

आप अपनी कॉन्फ़िगरेशन के लिए प्रॉक्सी के रूप में कार्य करने के लिए एक sinmple व्यू सहायक बना सकते हैं, (पूरी तरह से अन परीक्षण किया गया)।

Module.php

public function getViewHelperConfig() 
{ 
    return array(
     'factories' => array(
      'configItem' => function ($helperPluginManager) { 
       $serviceLocator = $helperPluginManager->getServiceLocator(); 
       $viewHelper = new View\Helper\ConfigItem(); 
       $viewHelper->setServiceLocator($serviceLocator); 

       return $viewHelper; 
      } 
     ), 
    ); 
} 

ConfigItem.php

<?php 

namespace Application\View\Helper; 

use Zend\View\Helper\AbstractHelper; 
use Zend\ServiceManager\ServiceManager; 

/** 
* Returns total value (with tax) 
* 
*/ 
class ConfigItem extends AbstractHelper 
{ 
    /** 
    * Service Locator 
    * @var ServiceManager 
    */ 
    protected $serviceLocator; 

    /** 
    * __invoke 
    * 
    * @access public 
    * @param string 
    * @return String 
    */ 
    public function __invoke($value) 
    { 
     $config = $this->serviceLocator->get('config'); 
     if(isset($config[$value])) { 
      return $config[$value]; 
     } 

     return NULL; 
     // we could return a default value, or throw exception etc here 
    } 

    /** 
    * Setter for $serviceLocator 
    * @param ServiceManager $serviceLocator 
    */ 
    public function setServiceLocator(ServiceManager $serviceLocator) 
    { 
     $this->serviceLocator = $serviceLocator; 
    } 
} 

फिर आप आप उन्हें पाठ्यक्रम :)

के अपने config में स्थापित किया है, माना आपके ध्यान में रखते हुए कुछ इस तरह कर सकता है,
echo $this->configItem('config_key'); 
echo $this->configItem('web_url'); 

मैं व्यक्तिगत रूप से हर बार विचारों के माध्यम से मूल्यों को पारित करता हूं, हालांकि वें ई संभव के रूप में एक गूंगा देखें।

+0

यह ठीक काम किया! धन्यवाद, केवल एक चीज जिसे मैं जोड़ सकता हूं वह यह है कि आपको मेरे उदाहरण में एक बहुआयामी सरणी नहीं बनाना चाहिए, बल्कि केवल 'वेरिएबल्स' डालें जिन्हें आप घोषित करना चाहते हैं। – Peter

+0

आप हमेशा संशोधित कर सकते हैं ताकि यह 'dim.somethingelse' या 'something/someelse' – Andrew

+0

अच्छा उत्तर, लेकिन मेरे लिए काम नहीं कर रहा है :(मैं ZF2 (2.2) का उपयोग कर रहा हूं, तो यह कई आयामों का उपयोग कर सकता है। , क्या आप चरण-दर-चरण स्पष्टीकरण द्वारा अधिक समझा सकते हैं। मैं एप्लिकेशन मॉड्यूल में हेल्पर बनाना चाहता हूं। किसी भी मदद की सराहना की जाती है। –

1

मैंने इसे एक अलग पोस्ट पर पहले उत्तर दिया।

/* Inside your action controller method */ 
// Passing Var Data to Your Layout 
$this->layout()->setVariable('stack', 'overflow'); 

// Passing Var Data to Your Template 
$viewModel = new ViewModel(array('stack' => 'overflow')); 


/* In Either layout.phtml or {Your Template File}.phtml */ 
echo $this->stack; // Will print overview 

यह है ... दृश्य सहायकों, घटना प्रबंधक, सेवा प्रबंधक, या कुछ और के साथ गड़बड़ करने की कोई ज़रूरत नहीं है।

आनंद लें!

+2

यह काम करता है, यकीन है कि। लेकिन लड़के ने अपने सवाल में कहा था: "मैं हर नियंत्रक में इसके लिए एक व्यू वैरिएबल बनाना नहीं चाहता हूं।" ... और आपका जवाब मूल रूप से है, "इसे प्रत्येक नियंत्रक में बनाएं": - / – timdev

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