Member-only story
Symfony: cómo resolver una dependencia circular
Técnicas para resolver una dependencia circular empleando el Event Dispatcher
4 min readMay 14, 2019
Hoy quiero hablaros de un error muy común con el que os podéis topar al montar aplicaciones relativamente complejas con Symfony: la dependencia circular entre servicios.
Este error, cuyo aspecto es similar al siguiente:
Circular reference detected for service "security.authorization_checker", path: "sensio_framework_extra.security.listener -> security.authorization_checker -> security.authentication.manager -> security.user.provider.concrete.entity_provider -> doctrine.orm.default_entity_manager -> doctrine.dbal.default_connection -> app.listener.user -> app.mail_service -> templating -> twig -> security.context".
sucede en el momento en el que cerramos un círculo de dependencias en el que el servicio A depende del B, que a su vez depende de C y éste último de A.
A -> B -> C -> A
Una de las situaciones más comunes en las que nos puede aparecer es la siguiente:
- Declarar un
DoctrineEntityListener
para que cada vez que se genere un eventopostPersist
enviemos un email. - Este email se envía por medio de una clase (por ejemplo
AppMailer
) que inyectaremos en el…