使用Symfony2中的事件侦听器记录请求和响应

Zai*_*Zed 5 event-listener symfony

我试图在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);


    }
} 
Run Code Online (Sandbox Code Playgroud)

使用此配置:

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

如何在此操作中获取请求和响应?如果我将注入请求服务,我想我可以得到请求.但是回应怎么样?

Ziu*_*min 7

正如你可以在这里阅读,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.
}
Run Code Online (Sandbox Code Playgroud)