2013-07-20 9 views
8

मैं सोच रहा था कि क्या प्रत्येक बंडल के लिए पैरामीटर.आईएमएल फ़ाइल को परिभाषित करना संभव है या केवल उन बंडलों के लिए जो उन्हें चाहिए और उन्हें लोड करें।एक पैरामीटर.आईएमएल प्रति बंडल, symfony2

मैंने बहुत कुछ खोजा है लेकिन मुझे ऐसा समाधान नहीं मिल रहा है।

+0

क्या तुम यहाँ पूरा करने के लिए कोशिश कर रहे हैं:

imports: - { resource: parameters.yml } - { resource: @YourBundle/Resources/config/parameters.yml } - { resource: security.yml } - ... 

आपके पैरामीटर फ़ाइल डिफ़ॉल्ट के रूप में एक ही प्रारूप का पालन करना चाहिए? बस पूछना, क्योंकि मैं आपके प्रश्न को दो अलग-अलग तरीकों से समझ रहा हूं। अपने खुद के बंडल में एक पैरामीटर.आईएमएल फ़ाइल जोड़ें? या अपने खुद के बंडलों की सूची के लिए वैश्विक पैरामीटर.आईएमएल फ़ाइल का उपयोग करें? – UrGuardian4ngel

+0

मुझे एक नए कनेक्शन का उपयोग करने में सक्षम होना चाहिए जिसे मैंने बंडल में निर्दिष्ट किया है (वैश्विक नहीं) –

+0

उस स्थिति में, थॉमस ने पहले से ही जवाब लिखा था;) – UrGuardian4ngel

उत्तर

15

आपको थोड़ा सा स्पष्टीकरण देना चाहिए; आप चाहते हैं कि प्रत्येक एकल बंडल में स्वचालित रूप से parameters.yml फ़ाइल शामिल हो? मुझे डर है कि आपको सिम्फनी के डी कोर को संशोधित करने की आवश्यकता होगी। यद्यपि एक आसान विकल्प है।

यदि आप DependencyInjection के साथ अपना स्वयं का बंडल बनाते हैं तो आप बंडल के एक्सटेंशन क्लास में $loader->load('parameters.yml'); जोड़ सकते हैं।

एक्सटेंशन वर्ग YourBundle/DependencyInjection/YourBundleExtension.php में स्थित होना चाहिए।

वर्ग निम्नलिखित

class YourBundleExtension extends Extension 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $configuration = new Configuration(); 
     $config = $this->processConfiguration($configuration, $configs); 

     $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 
     $loader->load('parameters.yml'); // Adding the parameters file 
    } 
} 

की तरह दिखना चाहिए तो इस मामले में parameters.yml फ़ाइल YourBundle/Resources/config/parameters.yml में होगा।

+0

मुझे लगता है कि आयात के आदेश महत्वपूर्ण हैं। यदि 'services.yml' को कुछ पैरामीटर की आवश्यकता होती है जो 'पैरामीटर.आईएमएल' में परिभाषित हैं, तो आप कुछ परेशानी में भाग सकते हैं, क्योंकि वे अभी तक ज्ञात नहीं हैं। या क्या मैं इसे गलत तरीके से देख रहा हूं? – UrGuardian4ngel

+0

मैंने अभी कोशिश की और यह काम किया; बाद में लोड की गई फ़ाइल से पैरामीटर का उपयोग करना संभव है। मेरा अनुमान है कि सिम्फनी कॉन्फ़िगरेशन फ़ाइल को बाद में संकलित करता है जब प्रत्येक पैरामीटर विलय और डी-डुप्लिकेट किया गया है। हालांकि यह बंडलों में काम नहीं कर रहा है। –

+0

और मैं इसे सिद्धांत विन्यास में भी कैसे जोड़ सकता हूं (इसलिए मुझे एक नया कनेक्शन मिलता है) –

2

यदि आप बस अपनी कॉन्फ़िगरेशन में बंडल से पैरामीटर फ़ाइल शामिल करना चाहते हैं, तो बस बंडलों से अतिरिक्त कॉन्फ़िगरेशन फ़ाइलों को आयात करने के लिए सामान्य प्रारूप का पालन करें (डिफ़ॉल्ट ऐप दिखाता है कि इसे रूटिंग के साथ कैसे करें)। अपने config अद्यतन अपने पैरामीटर इस तरह फ़ाइल शामिल करने के लिए:

parameters: 
    my.parameter: "my value" 
+0

जो केवल पहले आयात के लिए काम करेगा, क्योंकि दूसरा आयात (बंडल से) पहले आयात से पैरामीटर सामग्री को ओवरराइड करेगा। देखें क्यों: https://github.com/symfony/DependencyInjection/blob/master/ParameterBag/ParameterBag.php#L120-123 – Michael

+0

वह केवल उसी नाम के साथ अलग-अलग पैरामीटर को ओवरराइट करेगा, न कि पूरे लॉट। एक प्रोजेक्ट के अपने सीमित अनुभव में, मैं ऐप में उपलब्ध दोनों सेटों के साथ मुख्य पैरामीटर.एमएल और बंडल पैरामीटर.इएमएल का सफलतापूर्वक उपयोग कर रहा हूं (हालांकि मेरे दूसरे बंडल में इसका अपना पैरामीटर नहीं है, मैं उम्मीद नहीं करता किसी भी समस्या जब तक पैरामीटर एक ही बात कहा जाता है)। – DanielM

+0

एमएच अजीब, मैंने इसे नवीनतम 2.4.3 के साथ आजमाया और यह सफल नहीं हुआ। शायद यह सिर्फ कुछ गलत कर रहा था। – Michael

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