2013-07-16 24 views
2

看来我无法通过编译器传递来获取数据收集器。我试图保持数据收集器可选以启用。它在没有标签的YAML文件中定义,然后编译器通过基于参数设置添加标签。Symfony2在编译器中添加data_collector标记pass

看起来也许编译器传递已经太迟了添加标签?

<?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

如何初始化编译器中的整个数据收集器是否传递'git_data_collector_enabled'是否为真? –

回答

0

data_collector标签在symfony framework bundle profiler pass使用。 symfony框架捆绑中的编译器pass通常在你的编译器通过之前运行,因为在你的bundle(以及bundle按顺序加载)之前,你可能已经在应用内核的列表顶部附近注册了框架bundle。

这意味着不幸的是,使用data_collector标记为时已晚。但是你仍然可以操纵探查服务被实例化之前和使用addMethodCall方法事件探查器定义添加您git_data_collector到它:

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