2012-01-20 9 views
9

En mi aplicación Symfony2 estándar, tengo varios paquetes con algunas entidades. Algunas de estas entidades no se encuentran en la carpeta estándar que el automatismo de la doctrina descubre (por ejemplo, /src/Acme/DemoBundle/Entities) pero en una ubicación diferente.¿Hay alguna manera de modificar la configuración de mapeo de entidad para doctrine fuera del archivo de configuración?

que fácilmente podría utilizar para contar config.yml doctrina de utilizar una ubicación diferente como esto:

doctrine: 
    orm: 
     auto_mapping: false 
     mappings: 
      AcmeDemoBundle: 
       type: annotation 
       prefix: Acme\DemoBundle\Entities\ 
       dir: %kernel.cache_dir%\Acme\DemoBundle\Entities 

Esto funciona. Pero digo que estoy teniendo 10 paquetes con un mapeo diferente, el config.yml se hincha muy rápido. ¿Hay alguna otra manera, por ejemplo, con un CompilerPass o mediante DependencyInjection, entonces no necesito agregar todas las entidades en mi config.yml? Ya examiné el DoctrineBundle, pero no tuve suerte hasta ahora.

+0

Estaba buscando exactamente cómo configurar las asignaciones en config.yml. Gracias :) – flu

Respuesta

2

Para contestar a mí mismo:

la forma más sencilla es ajustar la carga automática de clases, no hay necesidad de modificar la configuración. En distribución estándar de Symfony en autoload.php hay que añadir otra ubicación a la registerNamespace método:

$loader->registerNamespaces(array(
    [...] 
    'Foo' => array(__DIR__.'/../src/dirA', __DIR__.'/../src/dirB') 
)); 

Doctrina buscará entonces las entidades en el espacio de nombres "Foo" por primera vez en DIRA y luego en dirB si no lo encuentra.

0

Puede incluir otros archivos de configuración usando imports

# yaml 
imports: 
    - { resource: entities.yml } 

<!-- xml --> 
<imports> 
    <import resource="enditites.xml" /> 
</imports> 

// PHP 
$loader->import('entities.php'); 

Ni siquiera tiene que atenerse a un solo tipo de archivo. Es posible importar un archivo de configuración xml a un archivo yaml, por ejemplo.

+0

Pero tengo que agregar la configuración de forma manual. Estoy buscando una forma programática. – acme

Cuestiones relacionadas