2014-12-30 20 views
0

我試圖實現從Symfony的默認異常偵聽器派生的自定義異常偵聽器。最小碼爲:從Symfony默認異常偵聽器派生自定義異常偵聽器:什麼是正確的服務參數?

use Symfony\Component\HttpKernel\EventListener\ExceptionListener as SymfonyExceptionListener; 
namespace MyCompany\MyBundle\EventListener; 

class ExceptionListener extends SymfonyExceptionListener { 

    public function __construct($controller, LoggerInterface $logger = null) { 
    parent::__construct($controller, $logger); 
    } 

    public static function getSubscribedEvents() { 
    // The parent class has priority -128 
    return array(
     KernelEvents::EXCEPTION => array('onKernelException', -64), 
    ); 
    } 
} 

很顯然,我需要注入控制器和記錄到構造,這是我的問題開始的地方。根據該文件,我需要通過註冊服務:

services: 
    kernel.listener.custom_exception_listener: 
    class: MyCompany\MyBundle\EventListener\ExceptionListener 
    arguments: [] 
    tags: 
     - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: -64 } 

我需要什麼投入arguments: []?它必須沿線"@controller @logger-service",但我無法在任何地方找到正確的名稱。

回答

0

手頭註冊自定義異常偵聽器 - 只是註冊一些偵聽器。這裏的最小碼爲:

class ExceptionListener 
{ 
    public function listenExceptions(GetResponseForExceptionEvent $event) 
    { 
     // Some event management 
    } 
} 

和配置:

services: 
    kernel.listener.custom_exception_listener: 
    class: MyCompany\MyBundle\EventListener\ExceptionListener 
    tags: 
     - { name: kernel.event_listener, event: kernel.exception, method: listenExceptions, priority: -64 } 

爲了註冊監聽器,你不應該延長東西或注入服務。 另一方面,您可能需要一些服務來處理事件(記錄器或郵件程序)。在這種情況下,您應該創建構造函數並注入要使用的服務。

如果你想擴展的Symfony2 ExceptionListener(即用戶),%twig.exception_listener.controller%@logger是Symfony2的異常監聽

+0

你或多或少重複了我的代碼,但沒有回答我的問題默認參數。我從默認的ExceptionListener繼承的原因是我想保留99%的功能,但是修改爲1%。我知道如何註冊事件監聽器。代碼已經在我的問題中了。你寫道:「在這種情況下,你應該創建構造函數並注入將要使用的服務。」真的嗎?這正是我的問題所在。什麼是正確的名稱(在YAML文件中)需要放入事件偵聽器的構造函數的「控制器」參數? – user2690527

+0

將默認的symfony異常監聽器參數添加到答案 – Ziumin

+0

謝謝,我只想知道。 – user2690527