Я создаю некоторые из моих собственных событий, используя Symfony Event Dispatcher, который работает отлично.
Однако я заметил, что слушатель, который я настроил в symfony, загружается не лениво, он всегда инициализируется.
Однако он редко используется.
Конфиг в моем services.yml выглядит так:
my.handler:
class: Acme\AcmeBundle\DependencyInjection\MyHandler
arguments:
- @my.dependency
tags:
- { name: kernel.event_listener, event: my.event, method: handle }
Есть ли способ настроить это так, чтобы @ my.handler инициализировался только при возникновении события?
Потому что теперь он инициализируется (вместе со всеми его зависимостями), когда он помещается в Диспетчер.
Есть документация о ContainerAwareEventDispatcher:
http://symfony.com/doc/current/components/event_dispatcher/container_aware_dispatcher.html
Но это только объясняет, как использовать его напрямую в PHP, а не как настраивать его в стандартном проекте symfony2.
Вы можете определить это как Ленивые Услуги добавление относительного тега (как описано Вот ) как пример:
my.handler:
class: Acme\AcmeBundle\DependencyInjection\MyHandler
lazy: true
arguments:
- @my.dependency
tags:
- { name: kernel.event_listener, event: my.event, method: handle }
Не забудьте установить Мост ProxyManager как описано в док.
Надеюсь это поможет
Других решений пока нет …