Загрузка конфигурационного файла Symfony 2

Я хочу добавить новый файл конфигурации в Bundle/Resources/config. Я пробовал следовать http://symfony.com/doc/current/cookbook/bundles/extension.html, но он не работает должным образом, и я получаю

Нет расширения, способного загрузить конфигурацию для "mailbroker_mail_details"

Мои файлы:

MailbrokerMailDetailsExtension.php

<?php

namespace Mailbroker\MailDetailsBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;

class MailbrokerMailDetailsExtension extends Extension
{
    /**
     * {@inheritDoc}
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
        $loader->load('canonisers.yml');
    }

    public function getAlias()
    {
        return 'mailbroker_mail_details';
    }
}

configuration.php

<?php

namespace Mailbroker\MailDetailsBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

class Configuration implements ConfigurationInterface
{
    /**
     * {@inheritDoc}
     */
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('mailbroker_mail_details');

        $rootNode
            ->children()
                ->scalarNode('abc')->end()
            ->end()
        ;

        return $treeBuilder;
    }
}

canonisers.yml

mailbroker_mail_details:
    abc: 123

Конфигурация правильная (при размещении в app/config/config.yml она загружается как следует), canonisers.yml загружен правильно, но по какой-то причине я не могу заставить его работать вместе. Спасибо за вашу помощь!

Ответ 1

Ну, я не пробовал, но вы должны иметь возможность использовать расширение Yaml для загрузки в файл canonisers.yml напрямую и добавить его в конфиги. Не рекомендуется (обходит файл кэширования приложения), но он может работать:

use Symfony\Component\Yaml\Yaml;

class MailbrokerMailDetailsExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $file = __DIR__.'/../Resources/config/canonisers.yml';
        $configs = array_merge($configs,Yaml::parse(file_get_contents($file));

        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);
        ....

Полностью непроверенный. Вам может потребоваться добавить в app/config/config.yml

mailbroker_mail_details: ~

Просто, чтобы пройти сообщение об ошибке. Не уверен.

Сообщите мне, если он работает.

Ответ 2

Хорошо, поэтому @Iltar из канала #symfony irc указал мне на поваренную книгу: http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html

Короче говоря, PrependExtensionInterface с предварительным методом.

Он был добавлен с тех пор, как я в последний раз читал книги и кулинарные книги по symfony, и в этом случае это было не совсем похоже на googlable, поэтому я просто оставлю ссылку здесь для других людей.