我正在使用Symfony2,而我正试图设置服务定义覆盖。
扩展已加载correclty,但服务定义未更改。
以下是代码:
class AppExtension 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');
$container->setParameter('app.comment.delay_between', $config['comment']['delay_between']);
$def = $container->getDefinition('app.comment.manager')
->replaceArgument(0, $config['comment']);
$container->setDefinition('app.comment.manager2', $def);
}
/**
* {@inheritdoc}
*/
public function getAlias() {
return 'app';
}
}
服务定义:
app.comment.manager:
class: AppBundle\Comment\CommentManager
arguments:
- []
- "@doctrine.orm.entity_manager"
类CommentManager的构造函数:
/**
* CommandManager constructor.
* @param array $config
* @param EntityManagerInterface $em
*/
public function __construct(array $config, EntityManagerInterface $em) {
$this->config = $config;
var_dump($config);
$this->em = $em;
}
在控制器中我打电话:
$this->get('app.comment.manager');
$this->get('app.comment.manager2');
我得到了这个结果:
/home/nathan/Dev/click-tube/src/symfony/src/AppBundle/Comment/CommentManager.php:37:
array (size=0)
empty
/home/nathan/Dev/click-tube/src/symfony/src/AppBundle/Comment/CommentManager.php:37:
array (size=1)
'delay_between' => int 60
正如您所看到的,我无法修改app.commment.manager服务定义(这就是我想要做的)。但我可以反映扩展创建的服务的变化。 在app.comment.manager上应用更改的解决方案是什么?
谢谢。
答案 0 :(得分:1)
尝试在服务中注入扩展中定义的参数,例如:
app.comment.manager:
class: AppBundle\Comment\CommentManager
arguments:
- "%app.comment.delay_between%"
- "@doctrine.orm.entity_manager"
希望这个帮助
答案 1 :(得分:0)
我遇到了同样的问题,其中replaceArgument调用并没有真正修改给我服务的构造函数的参数。原因是我的services.yml已经在我的/app/config/config.yml中导入,如:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
- { resource: "@MyMightyBundle/Resources/config/services.yml" }
这将覆盖在met bundle扩展文件中加载的服务定义。删除config.yml中的service.yml导入解决了我的问题。