2014-12-28 178 views
4

我正嘗試在Symfony2中使用事件監聽器來記錄請求和響應。Symfony2中事件監聽器的日誌請求和響應

我已經註冊了以下服務:

class LoggerListener 
{ 

    /** 
    * @var \Doctrine\ODM\MongoDB\DocumentManager 
    */ 
    private $documentManager; 

    public function __construct(DocumentManager $documentManager) 
    { 

     $this->documentManager = $documentManager; 
    } 

    public function onKernelResponse(FilterControllerEvent $event) 
    { 
     $controller = $event->getController(); 

     if (! is_array($controller)) { 
      return; 
     } 

     if (! $controller instanceof BaseAPIController) { 
      return; 
     } 


     $log = new ServerRequestsLog(); 
     $log->setRequest($request); 
     $log->setRequest($response); 


    } 
} 

與此配置:

example.response_listener: 
     class: Example\ServerBundle\EventListener\LoggerListener 
     arguments: ["@doctrine.odm.mongodb.document_manager"] 
     tags: 
      - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse } 

我怎樣才能獲得請求和在這個動作的反應如何?我想我可以得到請求,如果我將注入請求服務。但答覆呢?

回答

6

因爲您可以read here,kernel.response事件對象,傳遞給您的偵聽器的是FilterResponseEvent。該對象有getRequestgetResponse方法。所以你的代碼應該是這樣的:

public function onKernelResponse(FilterResponseEvent $event) 
{ 
    $request = $event->getRequest(); 
    $response = $event->getResponse(); 

    $log = new ServerRequestsLog(); 
    $log->setRequest($request); 
    $log->setRequest($response); 
    //....Save it with document manager, etc. 
}