Загрузка конфигурационного файла 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, поэтому я просто оставлю ссылку здесь для других людей.