为什么我的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
答案 0 :(得分:0)
它不起作用,因为bundle扩展的load方法负责加载与它所属的bundle相关的服务配置,并且仅用于此。作为load方法的参数获得的容器只是app容器的副本,它不包含所有内容(只是参数)[#using-the-load-method]。
使用load()方法
在load()方法中,将加载与此扩展相关的所有服务和参数。此方法不会获取实际的容器实例,而是获取副本。此容器仅包含实际容器中的参数。加载服务和参数后,副本将合并到实际容器中,以确保所有服务和参数也被添加到实际容器中。
正如您所说,您可以使用prepend方法为其他包提供合理的默认配置,并轻松使用您的[prepend_extension]。