2013-03-18 55 views
0

我的印象是我可以像下面的代码中那样获取请求对象。与依赖注入有关。依赖注入Symfony 2简单代码返回错误

下面启用此功能作为一种服务,一切似乎是正确设置,除了这给这个错误的第一个参数:

ErrorException:开捕致命错误:参数1传递给....

namespace Acme\Bundle\BundleName\EventListener; 

use Symfony\Component\HttpKernel\Event\GetResponseEvent; 

class RequestListener 
{ 

    public function onKernelRequest(GetResponseEvent $event) 
    { 

     $request = $event->getRequest(); 

     // etc.... 

我猜上述不是你怎么做的?

+0

我们需要整个异常 – 2013-03-18 05:17:53

+0

我想我已经在通过“@service_container”作为一个参数(services.yml)工作了。我听说那不是一个好方法? – user2143356 2013-03-18 05:19:41

+0

这意味着无论你在传递什么信息之前它不是'GetResponseEvent'对象 – 2013-03-18 05:23:25

回答

0

如果你想声明的内核请求事件侦听器,您应该声明这种方式(注意标签参数):

services: 
    acme.demobundle.listener.request: 
     class: Acme\Bundle\BundleName\EventListener\RequestListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 

否则,如果你想创建只是一个服务,你应该声明它的方式

services: 
    acme.demobundle.demo.service: 
     class: Acme\Bundle\BundleName\Service\DemoService 
     arguments: [@service_container] 

对于服务或侦听器,我建议只注入所需的服务。

很高兴知道服务将在首次调用时初始化。

可以通过容器访问服务,侦听器和树枝扩展。

$this->container->get('your.listener.name') 
$this->container->get('your.service.name') 
$this->container->get('your.extension.name') 
+0

谢谢。所以,要做“我建议只注入所需的服务”我该怎么做?我会用什么来代替这一行:参数:[@service_container]注入所需的部分,如参数:[listener_name] – user2143356 2013-03-18 05:52:27

+0

如果你想注入请求,你应该能够做'arguments:[@request ]'。请求是一项服务,因此您可以通过容器访问。如果你不需要的话,你不需要放置任何东西。如果你不需要,你可以删除service_container。 – 2013-03-18 05:54:16

+0

好的,太好了。我知道了。此外,在该监听器类中,我想设置一个cookie,并且使用$ response-> headers-> setCookie(new Cookie(etc ...)),但是如何访问$ response对象?我的问题是获得我需要的一切。 – user2143356 2013-03-18 05:56:39