【问题标题】:Symfony2: 3rd party bundle is not available in my bundle config.ymlSymfony2:我的包 config.yml 中没有第 3 方包
【发布时间】:2016-10-12 15:59:51
【问题描述】:

问题

为什么 winzou(第 3 方)配置不适用于捆绑包中的 config.yml?

它抛出“没有扩展能够加载配置 winzou...”

更新

http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html

看起来这是我想要发生的最终结果 - 被视为添加/附加到应用程序 config.yml。
我可以加载文件并添加它.. 但我觉得 symfony 已经允许为每个包加载额外的配置.. 必须有一种更简单的方法来加载它。


我加载了 winzou 状态机包:
/app/AppKernel.php

new winzou\Bundle\StateMachineBundle\winzouStateMachineBundle(),

然后我从我的包 (OrderBundle) 中加载配置。 /src/OrderBundle/DependencyInjection/OrderExtension.php

class OrderExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('config.yml');
    }
}

如果我将状态机配置放入 OrderBundle 配置中: /src/OrderBundle/Resources/config/config.yml

winzou_state_machine:
    order_state_machine:
    ...

抛出异常:

There is no extension able to load the configuration for "winzou_state_machine" (in [...]/OrderBundle/DependencyInjection/../Resources/config/config.yml). Looked for namespace "winzou_state_machine", found none

如果我将状态机配置放在根应用文件夹中就可以了。
/app/config/config.yml

【问题讨论】:

    标签: php symfony configuration state-machine


    【解决方案1】:

    它不起作用,因为捆绑扩展的加载方法负责加载与其所属捆绑相关的服务配置,并且仅用于此目的。您作为 load 方法的参数获得的容器只是应用程序容器的副本,它不包含所有内容(仅包含参数)[#using-the-load-method]

    使用 load() 方法

    在load()方法中,所有与该扩展相关的服务和参数都会被加载。此方法获取的不是实际的容器实例,而是一个副本。此容器仅具有来自实际容器的参数。加载完服务和参数后,副本会合并到实际容器中,保证所有服务和参数也加入到实际容器中。

    正如您所说,您可以使用 prepend 方法为其他捆绑包提供合理的默认配置,并简化您的 [prepend_extension] 的使用。

    【讨论】:

      猜你喜欢
      • 2010-10-21
      • 2012-09-09
      • 2012-06-06
      • 1970-01-01
      • 2013-10-02
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      相关资源
      最近更新 更多