Este creo que será el típico post que ve en internet que dices "mmmm interesante pro bah, no lo voy a usar" hasta que llega el día que te ocurre algo parecido y sabes que habías leído algo por ahí pero no sabes donde....
Esto te lo digo para que te guardes este post en favoritos que algún día lo usarás fijo! jaja
CONTEXTO
Hoy voy con un tema concreto. Te pongo en situación:
- Tienes un proyecto con PHP 7 que lo estás migrando a PHP 8
- Estás usando Symfony < 6 y te actualizas a Symfony >= 6
- Estás usando Doctrine-odm con mongo y seguramente actualizarás a nuevas versiones
- Como desarrollas con buenas prácticas, estás usando Traits que agrupan parte de tu lógica y componentes comunes
EL PROBLEMA
Qué ocurre?
Que cuando actualizamos todas las versiones, hay campos que "mágicamente" no se están mostrando en las vistas o que no se están guardando correctamente.
No aparece ningún error en los logs ni tampoco hay señales de que alguna lógica esté mal desarrollada
No se ha tocado ningún componente a mayores ya que simplemente hemos actualizado
LA CAUSA
Aquí está la chica de todo... la causa son los Traits y sus imports
Resulta que, por algún motivo que aún no he conseguido averiguar, al usar versiones más modernas de doctrine-odm, hace que los Traits no funcionen correctamente y a la hora de compilar los ficheros, "se salte" los traits y por tanto la definición de los campos.
Según lo que he leído por ahí parece ser que es por el método que usa doctrine para la compilación. Que lo han cambiado y mejora mucho los tiempos de compilación pero aparecen estos problemas de "linkado" de ficheros
LA SOLUCIÓN
Aquí viene la parte con más chiste. La solución es..... definir siempre los imports!
Es decir, si tu antes en tus Traits no tenías el import de algunos campos/definicioes en concreto porque ya lo hacías en las propias clases que usan los Tratis, pues todo funcionaba bien.
Bueno ya veis que soy directo y conciso! jeje Espero que esto os sirva de ayuda !!
Pues ahora NOP! tienes que añadir los imports de todas las definiciones en los Traits y así todo funcionará como antes!! (o por lo menos ya no sufres este error)






