看來你只需要在你的服務中的容器。爲了得到容器注入到你的事件監聽器,我更喜歡創造,你必須在你的容器註冊看代碼的單獨事件監聽:
首先創建事件監聽器類:
<?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
爲什麼注入整個'service_container'如果你只使用記錄器?注入'service_container'時可以避免**,因爲它會在應用程序和框架之間建立緊密的耦合。你應該考慮只注入'@ logger' –
是的,這是正確的,更好的解決方案只注入記錄器。它應該只是一個演示如何解決CaptainStiggz問題。 – sensi