Почему конфигурация winzou (сторонняя) недоступна для моего 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');
}
}
Если я помещу конфигурацию 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
Это не работает, потому что метод загрузки расширения пакета отвечает за загрузку конфигурации службы, связанной с пакетом, которому он принадлежит, и только для этого. Контейнер, который вы получаете в качестве аргумента метода load, является просто копией контейнера приложения, он не содержит всего (только параметры) [# Использование-на-нагрузка-метода].
Использование метода load ()
В методе load () будут загружены все службы и параметры, связанные с этим расширением. Этот метод не получает фактический экземпляр контейнера, но копию. Этот контейнер имеет только параметры из фактического контейнера. После загрузки сервисов и параметров копия будет объединена в фактический контейнер, чтобы гарантировать, что все сервисы и параметры также будут добавлены в фактический контейнер.
Как вы сказали, вы можете использовать метод prepend, чтобы обеспечить разумную конфигурацию по умолчанию для других пакетов и упростить использование ваших. [Prepend_extension].
Других решений пока нет …