我正在使用symfony2,它的调试工具栏很棒。
但是,我来安装som额外的捆绑包,添加一些元素,现在显示在两个层次上。
如何从工具栏中删除某些元素?
例如,我不需要关于我的phpversion的信息,而不需要关于路线的信息等。
答案 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/