Symfony 2加载自定义配置文件

Mis*_*iur 10 php configuration symfony

我想在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';
    }
}
Run Code Online (Sandbox Code Playgroud)

的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

canonisers.yml

mailbroker_mail_details:
    abc: 123
Run Code Online (Sandbox Code Playgroud)

配置是正确的(当它放在app/config/config.yml中时,它应该加载),canonisers.yml正确加载,但由于某种原因我不能让它一起工作.谢谢你的帮助!

Cer*_*rad 7

好吧,我没有尝试过,但你应该能够使用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);
        ....
Run Code Online (Sandbox Code Playgroud)

完全未经测试.您可能需要添加到app/config/config.yml

mailbroker_mail_details: ~
Run Code Online (Sandbox Code Playgroud)

只是为了通过错误消息.不确定.

如果有效,请告诉我.