2012-03-01 15 views
9

estoy usando Symfony2 y cuando intento generar el esquema ($ php app/consola doctrine: generate: esquema) me dieron un error ..Symfony2 Error: No se encontró archivo de asignación de nombre

 

    [Doctrine\ORM\Mapping\MappingException]                    
     No mapping file found named 'xxx.UserBundle.Entity.User.php' for class 'xxx\UserBundle\Entity\User'. 

sólo tener 2 paquetes en el proyecto:

  • UserBundle
  • FileBundle

conecto el FileBundle con la U serBundle con este código:

 

    
    /** 
    * @ORM\ManyToOne(targetEntity="xxx\UserBundle\Entity\User") 
    **/ 
    protected $user;  
 

Las cabeceras de los archivos son algo como esto:

 

    
    namespace xx\UserBundle\Entity; 

    use Doctrine\ORM\Mapping as ORM; 

    /** 
    * @ORM\Entity 
    **/ 
    class User 
    { ###...###} 
 

FileBundle es muy similar .. Gracias!

+0

que asumen '' xxx' y xx' son sólo sustituciones, ¿verdad? –

+0

sí, perdón por eso – quique150

+0

Agregué la respuesta ... pero es una posibilidad muy remota :) –

Respuesta

0

No puedo pensar en una razón por la que esto está sucediendo, pero voy a dar un salto aquí.

Intente editar su config.yml. doctrine sección debe tener este aspecto:

doctrine: 
    dbal: 
     default_connection: my_connection_name 
     connections: 
      fmefb: 
       host:  %database_host% 
       dbname: %database_name% 
       user:  %database_user% 
       password: %database_password% 
       driver: %database_driver% 
       port:  %database_port% 
       charset: UTF8 

    orm: 
     default_entity_manager: my_entity_manager 
     entity_managers: 
      my_entity_manager: 
       connection: my_connection_name 
       mappings: 
        CompanyNameSiteBundle: ~ 
        CompanyNameAdminBundle: ~ 
        CompanyNameSomethingElse: ~ 

Aviso mappings la lista en la parte inferior. Todos los paquetes que están "vinculados" se incluyen aquí.

Espero que esto ayude ....

+0

utilizo $ php app/console doctrine: mapping: info Se encontraron 1 entidades asignadas en el administrador de entidades predeterminado: [OK] xx \ FileBundle \ Entity \ File, alguna idea? – quique150

4

De alguna manera es extraño que usted está utilizando para PHPDriver ORM y no AnnotationDriver, ya que la información de su base de datos en clases es en las anotaciones.

De todos modos, si el comando php app/console doctrine:mapping:info le da solo 1 entidad, significa que su otro paquete que contiene la clase de usuario no se carga en la aplicación/archivo AppKernel.php. Cargar su UserBundle añadiendo la línea

new xxx\UserBundle\xxxUserBundle(), 

a la matriz $bundles en registerBundles() función. Después de eso, esta función debe ser algo como esto:

public function registerBundles() 
{ 
    $bundles = array(
     new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
     new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
     new Symfony\Bundle\TwigBundle\TwigBundle(), 
     new Symfony\Bundle\MonologBundle\MonologBundle(), 
     new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 
     new Symfony\Bundle\DoctrineBundle\DoctrineBundle(), 
     new Symfony\Bundle\AsseticBundle\AsseticBundle(), 
     new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 
     new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(), 
     new xx\FileBundle\xxFileBundle(), 
     new xxx\UserBundle\xxxUserBundle(), 
    ); 

    if (in_array($this->getEnvironment(), array('dev', 'test'))) { 
     $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
     $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
     $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
    } 

    return $bundles; 
} 

Por supuesto, el cambio 'XX' y 'xxx' con sus nombres reales.

Espero que esto ayude.

26

Usted está mezclando formatos de mapeo Doctrina, que tienen las anotaciones y al menos un archivo XML en Recursos/config/doctrine

De la documentación de Symfony:

"A bundle can accept only one metadata definition format. For example, 
it's not possible to mix YAML metadata definitions with annotated PHP 
entity class definitions." 

Así que la solución es:

No puede mezclar diferentes formatos de mapeo de Doctrine en un paquete dado. Entonces, use anotaciones para todas las entidades o use XML para todos.

+0

Esto resolvió mi problema y sigue siendo una restricción válida en Symfony 2.1, consulte symfony.com/doc/2.1/book/doctrine.html#add-mapping-information. Gracias –

+0

gracias, sinceramente. esto me ahorró toneladas de horas de depuración. Nunca volveré a utilizar la generación automática de objetos –

3

Estoy de acuerdo con @ilanco 100%. Además, la solución es QUITAR cualquiera.archivo XML en la carpeta, por ejemplo:

C:\xampp\htdocs\localxyz\src\AppBundle/Resources/config/doctrine/Comment.orm.xml

estos archivos XML creados cuando se ejecuta como comando:

C:\xampp\htdocs\localxyz>php app/console doctrine:mapping:import --force AppBundle xml

estiércol.

1

Buenos días,

Aunque sé que esto ha sido publicado hace años, sino que al igual que para publicar mi respuesta aquí, tal vez podría ayudar a alguien :)

simplemente borrar la caché, que funciona para mí, sin embargo

php bin/console cache:clear 

Gracias

Cuestiones relacionadas