Необязательная зависимость параметра для службы

Я знаю, что я могу добавить дополнительную службу для службы. Синтаксис

arguments: [@?my_mailer]

Но как добавить дополнительную зависимость параметра для службы?

arguments: [%my_parameter%]

Я пробовал

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

Но ни одна из них не работает, эта функция реализована в sf2?

Ответ 2

Я думаю, что если вы не передадите/не установите параметр, Symfony будет жаловаться на зависимость службы. Вы хотите сделать параметр необязательным, чтобы он не всегда указывался в файле 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
    );
}

Вы производите свой параметр, указав значение по умолчанию для параметра%%%

Пожалуйста, дайте мне знать, если у вас есть лучшие альтернативы.

Ответ 3

Вы пытались установить значение по умолчанию для параметра? Например:

namespace Acme\FooBundle\Services;

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

и не вводить ничего.