2

似乎我无法通过编译器传递加载数据收集器。我试图保持数据收集器可选启用。它在没有标签的 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',
        ));
    }
4

1 回答 1

0

data_collector标签用于symfony 框架包分析器 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'))));
}

这个想法来自探查器编译器传递,因为您实际上是在尝试复制它的一些功能。

于 2013-08-21T09:50:50.717 回答