Estoy trabajando en un paquete de Symfony 5+ que quiero usar en diferentes proyectos. El paquete incluye varias entidades diferentes que se pueden utilizar en los proyectos. Algunos proyectos usarán todas esas entidades, otros solo algunas y algunos no usarán ninguna de estas entidades, sino solo la otra funcionalidad que ofrece el paquete.

Sin embargo, Doctrine siempre creará automáticamente las tablas de base de datos correspondientes para todas estas entidades en todos los proyectos. Entonces, hay muchas tablas vacías / no utilizadas en las bases de datos del proyecto.

Si bien las mesas vacías no hacen ningún daño real, creo que este no es realmente un enfoque limpio. ¿Es posible hacer que estas entidades sean opcionales para permitir que el proyecto decida qué usar y qué tablas deben crearse?

Por supuesto, sería responsabilidad de los paquetes asegurarse de que las entidades desactivadas no se puedan utilizar, pero esto no es un problema.

Obviamente, podría dividir el paquete en varios paquetes diferentes que contienen solo unas pocas / una entidad, pero esto crearía mucha sobrecarga y tampoco sería limpio .

1
FLichter 25 nov. 2021 a las 10:37

1 respuesta

La mejor respuesta

Puede crear un comportamiento personalizado escribiendo su propio Controlador de metadatos.

Para no reescribir todo, puede extender la clase Doctrine\ORM\Mapping\Driver\AnnotationDriver y solo llamar a parent::loadMetadataForClass($className, $metadata); si el className está en la lista de permisos de su entidad, dependiendo de la configuración de su paquete.

Deberá registrar su controlador de metadatos en Symfony:

doctrine:
  orm:
    mappings:
      your-bundle:
        is_bundle: true
        type: Path\To\Your\Driver
        prefix: 'Namespace\of\your\bundle\Entity\'
3
Alain Tiemblo 25 nov. 2021 a las 10:51