2015-01-15 6 views
5

के रूप में उपयोग के लिए गैर स्केलर ENVs मैं Symfony2 में अपने पैरामीटर सेट करने के लिए ENVs का उपयोग करने का प्रयास कर रहा हूं। स्केलर मान काफी आसान हैं, लेकिन मेरे पास ऐसे पैरामीटर हैं जो सरणी हैं जिन्हें मुझे किसी भी तरह ENVs के साथ सेट करने की आवश्यकता है।सिम्फनी पैरामीटर

प्रश्न में पैरामीटर:

parameters: 
    redis.servers: 
    - { host: 127.0.0.1, port: 6379 } 
    - { host: other, port: 6379 } 
    # and so on 

किकर यहाँ कि सर्वर की सरणी गतिशील रूप से परिवर्तित कर सकते हैं, तो मैं बस वहाँ 2.

मुझे क्या करना आशा व्यक्त की क्या कल्पना नहीं कर सकते है (लेकिन यह सिर्फ मुझे जेसन की एक स्ट्रिंग देता है):

SYMFONY__REDIS__SERVERS=[{"host":"127.0.0.1","port":"6379"}] 

क्या यह संभव है? कोई काम-आस-पास जो व्यवहार्य हैं? ऐसे कई बंडल हैं जिनका उपयोग हम सरणी/ऑब्जेक्ट पैरामीटर स्वीकार करते हैं, इसलिए मैं पैरामीटर को संसाधित करने के लिए वहां कोई अपडेट नहीं कर सकता। यदि कुछ भी हो, तो ऐप स्तर होना होगा।

धन्यवाद।

उत्तर

1

मैं अभिभावक कर्नेल की getEnvParameters() विधि को ओवरराइड करने के लिए AppKernel को अद्यतन करके इसे हल करने में सक्षम था। यह विधि केवल उन मानकों पर चलती है जो कर्नेल पहले से ही ENV में पाया जाता है (तकनीकी रूप से $ _SERVER से)। मुझे यह पसंद है क्योंकि यह पूरे पैरामीटर स्टैक पर नहीं चलाएगा, न ही पूरे $ _SERVER सरणी।

protected function getEnvParameters() 
{ 
    $parameters = parent::getEnvParameters(); 
    foreach ($parameters as &$parameter) { 
     if (is_string($parameter)) { 
      $decoded = json_decode($parameter, true); 
      // we only care about arrays (or objects that get turned into arrays) 
      if (!json_last_error() && is_array($decoded)) { 
       $parameter = $decoded; 
      } 
     } 
    } 

    return $parameters; 
}