2012-09-25 14 views
11

मुझे पता है कि सेवा के लिए वैकल्पिक सेवा निर्भरता जोड़ना संभव है। वाक्य रचना हैसेवा के लिए वैकल्पिक पैरामीटर निर्भरता

arguments: [@?my_mailer] 

लेकिन मैं कैसे एक सेवा के लिए वैकल्पिक पैरामीटर निर्भरता जोड़ सकता हूँ?

arguments: [%my_parameter%] 

मैं

arguments: [%?my_parameter%] 
arguments: [?%my_parameter%] 

की कोशिश की लेकिन उनमें से कोई भी काम करते हैं, इस सुविधा SF2 में लागू है?

+0

वैकल्पिक पैरामीटर का क्या लाभ है? पैरामीटर वातावरण के बीच आपकी कॉन्फ़िगरेशन को अलग करने के लिए हैं। आप बस अपने वातावरण में कॉन्फ़िगरेशन बदल सकते हैं, लेकिन यह उतना साफ नहीं होगा। – Ryan

उत्तर

-2

क्या आपने पैरामीटर के लिए डिफ़ॉल्ट मान सेट करने का प्रयास किया था? इस तरह:

namespace Acme\FooBundle\Services; 

class BarService 
{ 
    public function __construct($param = null) 
    { 
     // Your login 
    } 
} 

और कुछ भी इंजेक्शन नहीं।

+1

सिम्फनी पैरामीटर नॉटफाउंड अपवाद फेंक देगा! –

8

मुझे लगता है कि यदि आप पैरामीटर पास/सेट नहीं करते हैं, तो सिम्फनी सेवा निर्भरता के बारे में शिकायत करेगा। आप पैरामीटर को वैकल्पिक बनाना चाहते हैं ताकि हमेशा config.yml फ़ाइल में सेट करने की आवश्यकता न हो। और जब भी यह सेट हो, आप उस पैरामीटर का उपयोग करना चाहते हैं।

मेरी समाधान नहीं है:

# src/Acme/HelloBundle/Resources/config/services.yml 
parameters: 
    my_parameter: 

services: 
    my_mailer: 
     class:  "%my_mailer.class%" 
     arguments: ["%my_parameter%"] 

और फिर

# you-bundle-dir/DependencyInjection/Configuration.php 

public function getConfigTreeBuilder() 
{ 
    $treeBuilder = new TreeBuilder(); 

    $rootNode = $treeBuilder->root('you_bundle_ns'); 

    // This is for wkhtmltopdf configuration 
    $rootNode 
      ->children() 
      ->scalarNode('my_parameter')->defaultNull()->end() 
      ->end(); 

    // Here you should define the parameters that are allowed to 
    // configure your bundle. See the documentation linked above for 
    // more information on that topic. 

    return $treeBuilder; 
} 

और फिर

# you-bundle-dir/DependencyInjection/YourBundleExtension.php 

public function load(array $configs, ContainerBuilder $container) 
{ 
    $configuration = new Configuration(); 
    $config = $this->processConfiguration($configuration, $configs); 

    $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); 
    $loader->load('services.xml'); 


    $container->setParameter(
     'you_bundle_ns.your_parameter', 
     isset($$config['you_bundle_ns']['your_parameter'])?$$config['you_bundle_ns']['your_parameter']:null 
    ); 
} 

आप '% पैरामीटर% करने के लिए डिफ़ॉल्ट मान देकर अपने पैरामीटर वैकल्पिक बनाने '

यदि आपके पास बेहतर विकल्प हैं तो कृपया मुझे बताएं।

+0

'$$ config' टाइपो? –

9

Symfony 2.4 से आप इस के लिए अभिव्यक्ति का उपयोग कर सकते हैं:

तर्क: [ "@ = container.hasParameter ('some_param') पैरामीटर ('some_param'):? 'DEFAULT_VALUE'"]

http://symfony.com/doc/current/book/service_container.html#using-the-expression-language

+0

इसके अलावा, आप तर्कों का उपयोग कर सकते हैं: ["@ = पैरामीटर ('some_param')? पैरामीटर ('some_param'): 'default_value' '] –

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