2013-03-18 66 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