Symfony2在编译器传递中添加data_collector标记

时间:2013-07-16 18:34:07

标签: php symfony

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

1 个答案:

答案 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,因为你基本上试图复制它的一些功能。