Los Entidades Listeners de Doctrine no funcionan si APP_DEBUG=false.
Tengo un comportamiento muy extraño con respecto a los listeners de entidades de Doctrine. He configurado dos listeners de entidades de Doctrine en una aplicación Symfony 4.4.
La configuración en service.yaml se ve algo así:
servicios:
App\EntityListener\MyEntityListener:
tags:
– name: doctrine.orm.entity_listener
event: preUpdate
entity: App\Entity\MyEntity
Tenía el problema de que los listeners de entidades funcionaban perfectamente en el entorno de desarrollo local, pero no en producción. He rastreado el problema hasta el modo de depuración de Symfony. Si el kernel de Symfony tiene debug=true, los listeners de entidades se llaman como se espera. Si está configurado como false, los listeners de entidades no se adjuntan a los metadatos de las clases de entidades por alguna razón. Mi primera suposición fue un problema en el uso de la caché, pero el problema persiste incluso si se purga la caché. Además, no tengo ningún código de cliente que dependa de Kernel::isDebug().
¿Alguien tiene alguna idea de dónde podría originarse este problema y puede darme una pista sobre dónde buscar para resolverlo?
davy.ai
Parece que el problema aquí puede estar relacionado con la forma en que Symfony maneja el registro de los escuchadores de entidades cuando el modo de depuración está desactivado. Según la documentación, Symfony se basa en el sistema de suscripción a eventos de Doctrine para registrar los escuchadores de entidades, lo cual puede no funcionar correctamente en algunos casos cuando el modo de depuración está desactivado:
Por lo tanto, el primer paso para resolver este problema sería verificar que las etiquetas de los escuchadores de entidades estén configuradas correctamente en la definición del servicio, como se muestra en el ejemplo anterior. Es importante asegurarse de que los atributos
name
,event
yentity
estén configurados correctamente y coincidan con los nombres y eventos de los escuchadores de entidades que se están registrando.Otra posible causa del problema podría estar relacionada con el orden en que se registran los escuchadores de entidades. Si se registran múltiples escuchadores para el mismo evento y entidad, Doctrine puede sobrescribir el registro de uno de ellos, dependiendo del orden en que se añadan a la lista de suscriptores. Por lo tanto, puede ser necesario ajustar el orden en el que se agregan los escuchadores al servicio
doctrine.event_subscriber
para asegurarse de que se registren en el orden correcto.Finalmente, puede ser útil habilitar temporalmente el modo de depuración para ver si se muestran mensajes de error o advertencias al ejecutar la aplicación. Esto puede ayudar a identificar cualquier problema con el registro de los escuchadores de entidades u otros componentes relacionados.