2015-02-06 71 views
2

我使用的是symfony2,它的調試工具欄非常棒。如何禁用一些symfony2調試工具欄元素?

但是,我已經安裝了som extra bundles,它添加​​了一些元素,現在顯示在兩個級別上。

如何從工具欄中刪除一些元素?

舉例來說,我並不需要信息關於我的phpversion,不是路線等

回答

4

工具欄中的元素稱爲DataCollectors,它們被用data_collector特殊服務。在以下幾行中,我將以Time Datacollector爲例。

因此,要停用其中一個,您首先必須獲取其服務ID。

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

輸出是: 您可以通過運行控制檯命令列出所有DataCollectors

[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沒有更多。

這是一種無法正常使用某些分析器項目的方法。 (AKA:一個symfony的更新不會影響它,除非他們改變DataCollectors的名稱)


的shortiest方式是direcly把零優先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> 

所有DataCollectors不在相同的文件中定義。但這裏是其中一些快速列表:

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: 
0

我有問題與PHP緩存。它有CacheDataCollector這可能在某些情況下崩潰的Symfony2 - https://github.com/php-cache/issues/issues/112 我試圖解決以上(含優先級0) - 它犯規工作,數據採集器仍然崩潰的Symfony2

我沒有任何想法,爲什麼優先= 0應該禁用任何東西。 你可以在 https://github.com/avorobiev/symfony2/blob/master/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ProfilerPass.php

檢查的Symfony2 ProfilerPass自己,這過程標籤data_collector所以,我用很骯髒的補丁這一翻譯 - 在應用程序配置我想補充的服務具有相同的名稱,但沒有標籤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/