似乎我无法通过编译器传递来加载数据收集器。我试图保持数据收集器可选启用。它在没有标记的YAML文件中定义,然后编译器传递根据参数设置添加标记。
似乎编译器传递可能为时已晚,无法添加标记?
<?php
if ($container->getParameter('git_data_collector_enabled')) {
$gitDataCollectorDef = $container->getDefinition('git_data_collector');
$gitDataCollectorDef->addTag('data_collector', array(
'template' => 'Profiler:git_info_layout',
'id' => 'git',
));
}
答案 0 :(得分:0)
data_collector
标记用于symfony framework bundle profiler pass。 symfony框架包中的编译器传递很可能在编译器通过之前运行,因为您可能已经在应用程序内核中的列表顶部附近注册了框架包(并且捆绑包按此顺序加载)。
这意味着遗憾的是,使用data_collector
标记为时已晚。但是,您仍然可以在实例化之前操纵探查器服务,并使用探查器定义上的git_data_collector
方法将addMethodCall
添加到其中:
if ($container->getParameter('git_data_collector_enabled')) {
//Get the profiler definition
$definition = $container->getDefinition('profiler');
//require the definition to run the add method with a reference to your data collector when it is instantiated
$definition->addMethodCall('add', array(new Reference('git_data_collector')));
//Add your template to the data_collector templates
$templates = $container->getParameter('data_collector.templates');
$container->setParameter('data_collector.templates', array_merge($templates,array('git' => array('git', 'Profiler:git_info_layout'))));
}
这个想法来自profiler compiler pass,因为你基本上试图复制它的一些功能。