Symfony 2 loading custom configuration file

六月ゝ 毕业季﹏ 提交于 2020-01-22 13:55:28

问题


I want to add a new configuration file in Bundle/Resources/config. I've tried following http://symfony.com/doc/current/cookbook/bundles/extension.html , but it doesn't work as it should and I get

There is no extension able to load the configuration for "mailbroker_mail_details"

My files:

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

The Configuration is correct (when placed in app/config/config.yml it loads as it should), canonisers.yml is loaded correctly, but for some reason I can't make it work together. Thanks for your help!


回答1:


Well, I have not tried it but you should be able to use the Yaml extension to load in the canonisers.yml file directly and add it to configs. Not recommended (bypasses the application caching stuff) but it might work:

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);
        ....

Completely untested. You might need to add to app/config/config.yml

mailbroker_mail_details: ~

Just to get past the error message. Not sure.

Let me know if it works.




回答2:


Ok, so @Iltar from #symfony irc channel pointed me to cookbook: http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html

Long story short, PrependExtensionInterface with prepend method.

It was added since I last read through symfony book and cookbook, and it wasn't exactly googlable in this case, so I'll just leave the link here for other people.



来源:https://stackoverflow.com/questions/22636925/symfony-2-loading-custom-configuration-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!