2013-03-18 2 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.... 

나는 당신이 그것을하는 방법은 아닌가요? 당신은 그냥 서비스를 만들려면 당신이해야한다, 그렇지 않으면

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

: 커널 요청에 이벤트 리스너를 선언하려면

+0

전체 예외가 필요합니다. –

+0

저는 '@service_container'를 인수 (services.yml)로 전달하여 해결했다고 생각합니다. 그래도 그게 좋은 방법이 아니라고 들었어? – user2143356

+0

이전에 전달한 내용이 모두 GetResponseEvent 객체가 아니 었음을 의미합니다. –

답변

0

, 당신은 그런 식으로 (태그 매개 변수를 통지를) 선언해야 그런 식으로 선언하십시오.

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

감사합니다. 따라서, "필요한 서비스 만 주입하는 것이 좋겠다"는 것을 어떻게해야합니까? arguments : [listener_name] – user2143356

+0

요청을 주입하려면 [arguments : [@request]를 할 수 있어야합니다. [@service_container] ]'. 요청은 서비스이므로 컨테이너를 통해 액세스 할 수 있습니다. 필요가 없다면 아무 것도 넣지 않아도됩니다. service_container가 필요하지 않으면 제거 할 수 있습니다. –

+0

좋습니다. 알 겠어. 또한 리스너 클래스에서 쿠키를 설정하려고하는데 $ response-> headers-> setCookie (새 쿠키 (etc ...))를 사용하고 있는데 어떻게 $ response 객체에 액세스 할 수 있습니까? 내 문제는 내가 필요한 모든 것에 접근하고있다. – user2143356