看来您只需要服务中的容器。要将容器注入您的事件侦听器,我更喜欢创建一个单独的 EventListener,您必须在容器中注册它,请参见代码:
首先创建事件监听器类:
<?php
namespace Acme\DemoBundle\Listener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\DependencyInjection\ContainerInterface;
class RequestListener
{
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
$logger = $this->container->get('logger')->getToken();
$logger->info('.....');
}
}
如您所见,我们现在已经注入了服务容器,并且可以使用它了。
接下来,您必须注册服务并注入服务容器:
services:
acme.demo.listener.request:
class: Acme\DemoBundle\Listener\RequestListener
arguments: [ @service_container ]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
请注意,在您的情况下,您必须选择要注入的事件。就我而言,我使用了kernel.request事件。您必须选择 kernel.terminate 事件。
这也很有帮助:http ://symfony.com/doc/current/cookbook/service_container/event_listener.html