如何停用某些symfony2调试工具栏元素?

时间:2015-02-06 14:10:27

标签: symfony profiler

我正在使用symfony2,它的调试工具栏很棒。

但是,我来安装som额外的捆绑包,添加一些元素,现在显示在两个层次上。

如何从工具栏中删除某些元素?

例如,我不需要关于我的phpversion的信息,而不需要关于路线的信息等。

2 个答案:

答案 0 :(得分:4)

工具栏的元素称为DataCollectors,它们是使用data_collector标记的特殊服务。在以下几行中,我将以Time Datacollector为例。

因此,为了停用其中一个,您首先必须获得他的服务ID。 您可以通过运行控制台命令列出所有DataCollectors

php console container:debug --show-private --tag='data_collector'

输出为:

[container] Public and private services with tag data_collector
Service ID                                                            template                                                          id                                    priority Class name
9d48641ce55174a7d8ab08e99157426bc290884423a78a5821440d644f6a37df_5    @WebProfiler/Collector/time.html.twig                             time                                  300      Symfony\Component\HttpKernel\DataCollector\TimeDataCollector

所以现在你获得了time服务的id,你必须建立名称。添加data_collector.作为id的前缀以获取名称。该服务的名称为data_collector.time

现在,当你想要停用它时,你必须给它一个零优先级。

在你的config.yml:

services:
    data_collector.time:
        class: "%data_collector.time.class%"
        tags:
           - {name: 'data_collector', priority: '0'}    

现在,探查者不再拥有time

这是一种无法正常使用某些探查器项目的方法。 (A.K.A:symfony更新不会影响它,除非他们更改DataCollectors的名称)

最简短的方法是将零优先级直接置于vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/config/collectors.xml

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="data_collector.config.class">Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector</parameter>
        <parameter key="data_collector.request.class">Symfony\Component\HttpKernel\DataCollector\RequestDataCollector</parameter>
        <parameter key="data_collector.exception.class">Symfony\Component\HttpKernel\DataCollector\ExceptionDataCollector</parameter>
        <parameter key="data_collector.events.class">Symfony\Component\HttpKernel\DataCollector\EventDataCollector</parameter>
        <parameter key="data_collector.logger.class">Symfony\Component\HttpKernel\DataCollector\LoggerDataCollector</parameter>
        <parameter key="data_collector.time.class">Symfony\Component\HttpKernel\DataCollector\TimeDataCollector</parameter>
        <parameter key="data_collector.memory.class">Symfony\Component\HttpKernel\DataCollector\MemoryDataCollector</parameter>
        <parameter key="data_collector.router.class">Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector</parameter>
    </parameters>

    <services>
[...]
        <service id="data_collector.time" class="%data_collector.time.class%" public="false">
            <tag name="data_collector" template="@WebProfiler/Collector/time.html.twig" id="time" priority="0" />
            <argument type="service" id="kernel" on-invalid="ignore" />
            <argument type="service" id="debug.stopwatch" on-invalid="ignore" />
        </service>
[..]
    </services>
</container>

所有DataCollector都未在同一文件中定义。但这里有一些快速清单:

data_collector.config:     
data_collector.request:
data_collector.router:
data_collector.security:
data_collector.logger:
data_collector.memory:
data_collector.exception:
data_collector.events:
swiftmailer.data_collector:

答案 1 :(得分:0)

我遇到了php-cache的问题。它有CacheDataCollector,在某些情况下可能会崩溃symfony2 - https://github.com/php-cache/issues/issues/112 我尝试了上面的解决方案(优先级0 ) - 并且无法正常工作,数据收集器仍然崩溃了symfony2

我没有任何想法为什么优先级= 0应该禁用任何东西。 您可以自己检查symfony2 ProfilerPass,其中包含进程标记data_collector https://github.com/avorobiev/symfony2/blob/master/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ProfilerPass.php

所以,我使用了非常脏的补丁intead - 在应用程序配置中我添加了具有相同名称的服务,但没有标记data_collector。 像

services:
  cache.data_collector:
    class: Cache\CacheBundle\DataCollector\CacheDataCollector

更干净,更稳定的方式是添加CompilerPass,它将删除标记 - https://blog.liplex.de/disable-elements-in-the-symfony-developer-toolbar-with-compilerpass/