如何在Symfony服务中添加配置?

3

我正在学习如何创建自己的配置文件并将其实现在我的服务中。我有以下配置文件。

sample_helper:
  admin:
    key: '45912565'
    secret: '2e6b9cd8a8cfe01418cassda3reseebafef9caaad0a7'

我成功地在我的依赖注入中使用配置创建了这个

private function addSampleConfiguration(ArrayNodeDefinition $node){
        $node->children()

            ->arrayNode("admin")
                ->children()
                    ->scalarNode('key')->end()
                    ->scalarNode('secret')->end()
                ->end()
            ->end()
         ->end();
    }

但是在我的服务中,我希望获取密钥值和秘密值。

class SampleService
{

    public function generateSample(){
       $key = ''; // key here from config
       $secret = ''; //secret from config;
    }
}

我尝试阅读文档,但实际上我不知道该如何做。我一无所知,不知道从哪里开始。

1个回答

1
我猜您想创建自定义捆绑配置。这在文档中 有很好的描述
您需要将配置传递给您的服务 - 例如通过构造函数注入:
class OpentokSessionService {

    private $key;
    private $secret;

    public function __constructor($key, $secret)
    {
        $this->key = $key;
        $this->secret = $secret;
    }

    //… 
}

然后您需要配置服务以加载设置:

<!-- src/Acme/SomeHelperBundle/Resources/config/services.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services
        http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="sample_helper.class" class="Acme\SomeHelperBundle\Service\OpentokSessionService">
            <argument></argument> <!-- will be filled in with key dynamically -->
            <argument></argument> <!-- will be filled in with secret dynamically -->
        </service>
    </services>
</container>

并且在您的扩展文件中:

// src/Acme/SomeHelperBundle/DependencyInjection/SomeHelperExtension.php

public function load(array $configs, ContainerBuilder $container)
{
    $loader = new XmlFileLoader($container, new FileLocator(dirname(__DIR__).'/Resources/config'));
    $loader->load('services.xml');

    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);

    $def = $container->getDefinition('sample_helper.class');
    $def->replaceArgument(0, $config['admin']['key']);
    $def->replaceArgument(1, $config['admin']['secret']);
}

@user3818576 没关系。你可以传递两个空字符串、两个null或两个false值... - jkucharovic
你好,现在明白了吗?像这样在我的service.yml中添加一个空参数,类似于arguments: [" ", " "],这是一个好的做法吗? - user3818576
@user3818576 是的,这是常见做法。 - jkucharovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接