【发布时间】:2014-05-03 10:25:25
【问题描述】:
我想在 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';
}
}
配置.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 已正确加载,但由于某种原因我无法使其一起工作。感谢您的帮助!
【问题讨论】:
-
配置对象期望 canonisers.yml 已经加载并在配置中可用。传统上,这将在 app/config 下并使用 imports: resource 来加载。然后,您的扩展程序从 Resources/config 加载默认值并合并到 app/config 值中。我没有很好地解释这一点。看看其他一些框架包,看看它们是如何进行依赖注入的。您捆绑将有两个配置文件。 Bundle\Resource\config 下的一个设置默认值,app/config 下的一个允许用户覆盖。
-
我明白你的意思,但仍然 - 有没有不涉及 app/config 的方法(至少现在)?我想允许完全默认配置,我不想使用参数。
标签: php symfony configuration