简体   繁体   中英

Inject EventDispatcher in service doesn't work in production environment - symfony 3.4

let's say I have a listener as a service like this

class MyListener
{
     /**
     * @var Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher 
     */
     private $dispatcher;

     function __construct(ContainerAwareEventDispatcher $dispatcher)
     {
        $this->dispatcher = $dispatcher;
     }

     public function onKernelRequest(GetResponseEvent $event)
     {
        //in my logic here I use $this->dispatcher->dispatch(my-own-event)
     }
}

service.yml

ap.my_listener:
        class: my-name-space\MyListener
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
        arguments: ["@debug.event_dispatcher.inner"]

It's work fine in development environment but when I switch to production environment after clearing cache I get this exception: The service "ap.my_listener" has a dependency on a non-existent service "debug.event_dispatcher.inner"

As I pressed by time I just inject all container, so what happened exactly and there is another way to inject Event Dispatcher without retrieve it from container

you should just inject the event dispatcher and use an interface like

use Symfony\Component\EventDispatcher\EventDispatcherInterface;

class MyListener
{
     /**
     * @var Symfony\Component\EventDispatcher\EventDispatcherInterface 
     */
     private $dispatcher;

     function __construct(EventDispatcherInterface $dispatcher)
     {
        $this->dispatcher = $dispatcher;
     }

     public function onKernelRequest(GetResponseEvent $event)
     {
        //in my logic here I use $this->dispatcher->dispatch(my-own-event)
     }
}

//service.yml
ap.my_listener:
    class: my-name-space\MyListener
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
    arguments: ["@event_dispatcher"]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM