Symfony2:我的捆绑包config.yml

时间:2016-06-11 23:19:01

标签: php symfony configuration state-machine

问题

为什么我的config.yml中的winzou(第三方)配置不可用?

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

更新

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

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

我加载winzou状态机捆绑:
/app/AppKernel.php

new winzou\Bundle\StateMachineBundle\winzouStateMachineBundle(),

然后我从我的bundle(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');
    }
}

如果我将statemachine配置放在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

1 个答案:

答案 0 :(得分:0)

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

  

使用load()方法

     

在load()方法中,将加载与此扩展相关的所有服务和参数。此方法不会获取实际的容器实例,而是获取副本。此容器仅包含实际容器中的参数。加载服务和参数后,副本将合并到实际容器中,以确保所有服务和参数也被添加到实际容器中。

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