symfony - 使用配置参数在 DIC 中连接 Symfony2 服务

标签 symfony

我希望能够通过配置参数连接服务,以便我可以在开发环境中使用 Web 服务客户端的模拟实现,并且可以在产品环境中使用正确的客户端。

这是我的 services.xml 中的一个片段:

<parameters>
    ...
    <parameter key="api_client.api_service.id">ic_domain_security.api_mock_service</parameter>
    ...
</parameters>

<services>
...
    <service id="ic_domain_security.api_client"
                 class="%api_client.class%"
                 public="true">
            <tag name="monolog.logger" channel="domainApiClient"/>
            <argument type="service" id="%api_client.api_service.id%"/>
            <call method="setLogger">
                <argument type="service" id="logger" on-invalid="null"/>
            </call>
        </service>

        <service id="ic_domain_security.api_restful_webservice"
                 class="IC\DomainSecurityBundle\ApiClient\ApiRestfulWebService"
                 public="false">
            <tag name="monolog.logger" channel="domainApiRestfulWebService"/>
            <argument>%ic_domain_security.service_url%</argument>
            <argument type="service" id="logger" on-invalid="null"/>
        </service>

        <service id="ic_domain_security.api_mock_service"
                 class="IC\DomainSecurityBundle\Tests\Mock\ApiMockService"
                 public="false">
            <call method="setLogger">
                <argument type="service" id="logger" on-invalid="null"/>
            </call>
        </service>
...
</services>

线路<argument type="service" id="%api_client.api_service.id%"/>正在尝试定义要基于参数传递的服务。所以我最终试图推出 api_client.api_service.id配置文件的参数。

不幸的是,似乎无法使用参数定义服务 ID,并且我收到以下错误:

ServiceNotFoundException: The service "ic_domain_security.api_client" has a dependency on a non-existent service "%api_client.api_service.id%".

是否有办法执行我上面解释的操作,以便可以使用配置参数传递服务 ID?

最佳答案

完成您想要做的事情的最佳方法是为您的包定义语义配置。无论如何,我认为如果不编写一些 PHP 代码就无法做到这一点。

这意味着您应该编写一个配置类和一个依赖注入(inject)扩展类。这是一个相当简单的过程,尽管 Symfony2 文档中没有详尽记录。我的建议是采用一些简单的 bundle (例如,我在阅读 FOSUserBundle 中学到了很多)并了解他们如何定义其配置。

Here you can find an introduction到 DIC 扩展系统。

关于symfony - 使用配置参数在 DIC 中连接 Symfony2 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8210289/

相关文章:

php - Symfony 2 Doctrine 一对多不写连接表

symfony - 在 symfony 中删除实体时删除文件

forms - Symfony 4 表单集合类型 : make FileType element required for new rows only

php - 如何在 symfony2 而不是异常页面中显示有关删除父节点的警告消息?

elasticsearch - 使用ONGR Elastic Bundle for Symfony进行子字符串搜索

php - Symfony 2 + Doctrine 2 + 继承

php - Symfony 5.1.3 清除缓存时出现问题 : Attempted to load class "MappingDriverChain" from namespace

symfony - travis+composer 加载 Symfony 2.8.3 时反复失败

symfony - 有没有办法自动从 Assetic 迁移到 gulp?

php - 如何存储主表数据