我一定错过了什么。我有一个" ConfigBundle"在其中我有这个services.yml(在Acme / ConfigBundle / Resources / config中):
services:
config.manager:
class: Acme\ConfigBundle\Manager\ConfigManager
arguments: ["@doctrine.orm.entity_manager", "@config.storage"]
此服务按预期工作。
接下来我有一个Configuration.php:
class Configuration implements ConfigurationInterface
{
/**
* {@inheritdoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('config');
$rootNode
->children()
->scalarNode('storage')->isRequired()->cannotBeEmpty()->end()
->variableNode('defaults')->end()
->end();
;
return $treeBuilder;
}
}
哪个也按预期工作。最后我有ConfigExtensions.php:
class ConfigExtension extends ConfigurableExtension
{
/**
* {@inheritdoc}
*/
protected function loadInternal(array $mergedConfig, ContainerBuilder $container)
{
// Set storage service.
$container->setAlias('config.storage', $mergedConfig['storage']);
if (!empty($mergedConfig['defaults'])) {
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
//$container->getDefinition('config.manager')->addArgument('test');
$container->getDefinition('config.manager')->addMethodCall('setDefaults', [$mergedConfig['defaults']]);
var_dump('It is being invoked!');
}
}
}
由于方法addMethodCall
无法正常工作,因此无法正常工作。 addMethodCall
执行,我检查了这个,但调用永远不会被调用,并且在缓存中的appDevDebugProjectContainer.xml中不可见。当我添加:
calls:
- [setDefaults, ['test']]
对于services.yml中的服务定义,它会被调用,但我无法通过在Extension中使用addMethodCall
来实现它。我没有收到任何错误,在尝试解决这个问题时,我不止一次清除了缓存目录。任何想法,为什么这不起作用?