2012-09-25 19 views
11

Bir hizmete isteğe bağlı hizmet bağımlılığı eklemek mümkün olduğunu biliyorum. sözdizimi Bir hizmet için isteğe bağlı parametre bağımlılığı

arguments: [@?my_mailer] 

Ama nasıl ben bir hizmet için opsiyonel parametre bağımlılık eklerim?

arguments: [%my_parameter%] 

Ben

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

çalıştı Ancak bunların hiçbirisi işe, SF2 uygulanan bu özelliği nedir?

+0

İsteğe bağlı bir parametrenin avantajı nedir? Parametreler, ortamlar arasındaki yapılandırmanızı değiştirmek içindir. Yapılandırmayı ortamlarınızda değiştirebilirdiniz, ancak bu kadar temiz olmaz. – Ryan

cevap

-2

Bir parametre için varsayılan bir değer ayarlamayı denediniz mi? Öyleyse:

ve hiçbir şey enjekte etmeyiniz.

+1

Symfony, ParameterNotFoundException öğesini atar! –

8

Parametreyi iletmezseniz/ayarlamazsanız, Symfony hizmet bağımlılığı konusunda şikayette bulunur. Parametreyi isteğe bağlı yapmak istediğinizde, her zaman config.yml dosyasında ayarlanması gerekli değildir. Ve her ayarlandığında bu parametreyi kullanmak istersiniz. Sen '% parametresi% Varsayılan değeri vererek parametre isteğe yapmak

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

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

Sonra

# 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; 
} 

Sonra

# 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 
    ); 
} 

:

benim çözüm var '

Daha iyi alternatifleriniz varsa lütfen bana bildirin.

+0

'$$ bir yazım hatası mı? –

İlgili konular