2012-06-20 34 views
13

我有幾個捆綁,我想知道是否有可能爲每個捆綁定製自己的錯誤頁面Symfony2:爲不同捆綁定製錯誤頁面

我看了食譜,示例只顯示了所有包的通用定製頁面。

有沒有辦法來覆蓋每個包的異常過程?

回答

5

監聽器本身必須檢測到 - 我不知道有任何方法來爲單個bundle指定監聽器。

<? 

namespace Your\MainBundle\EventListener; 
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; 

class YourExceptionListener 
{ 
    public function onKernelException(GetResponseForExceptionEvent $event) 
    { 
    $exception = $event->getException(); 
    $namespace = new \ReflectionObject($event->getController())->getNamespaceName(); 

    switch ($namespace) 
    { 
     case 'Acme\\DemoBundle': 
     // do whatever with $exception here 
     break; 
     case 'Some\\OtherBundle': 
     // do whatever with $exception here 
     break; 
     case 'Your\\MainBundle': 
     // do whatever with $exception here 
     break; 
     default; 
     // default 
    } 
    } 
} 

,並將其註冊

//services.yml 
kernel.listener.yourlistener: 
    class: Your\MainBundle\YourExceptionListener 
    tags: 
    - { name: kernel.event_listener, event: kernel.exception, method: onKernelException } 
-1

有我已經從路線正則表達式配置捕捉不同的錯誤頁面賺了一大筆錢,它從「kernel.exception_listener」監聽器和「kernel.exception工作「事件描述文件(http://symfony.com/doc/current/cookbook/controller/error_pages.html#use-kernel-exception-event)。

有了這個包,你可以:

  • 變化從路線的正則表達式的樹枝例外模板你想
  • 更改爲某些碼HTTP狀態代碼樹枝例外模板只
  • 啓用/禁用https://github.com/Kwrz/TwigException

    :在調試模式

鏈接到束(MIT許可證)的自定義模板

感謝您的想法Peter,我想在我的包的下一個版本中添加一個特性,以便從相應的包名稱空間中定義模板。