2012-03-01 17 views
9

Sto usando Symfony2 e quando provo a generare lo schema ($ php app/console doctrine: generate: schema) ho ottenuto un errore ..Symfony2 Errore: Nessun file di mapping trovato nominato

 

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

Ho solo avere 2 fasci nel proyect:

  • UserBundle
  • FileBundle

I collegare il FileBundle con U serBundle con questo codice:

 

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

Le intestazioni dei file sono qualcosa di simile:

 

    
    namespace xx\UserBundle\Entity; 

    use Doctrine\ORM\Mapping as ORM; 

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

FileBundle è molto simile .. Grazie!

+0

presumo '' xxx' e xx' sono solo sostituzioni, vero? –

+0

sì, mi dispiace per quello – quique150

+0

ho aggiunto la risposta ... ma è una lunga inquadratura :) –

risposta

0

Non riesco a pensare a una ragione per cui ciò stia accadendo, ma farò un salto qui.

Prova a modificare il tuo config.yml. doctrine sezione dovrebbe essere simile a questo:

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: ~ 

Avviso lista mappings sul fondo. Tutti i bundle che sono "collegati" sono inclusi qui.

Spero che questo aiuti ....

+0

io uso $ php app/console doctrine: mapping: info Trovato 1 entità mappate in default gestore entità: [OK] xx \ FileBundle \ Entity \ File, qualche idea? – quique150

4

E 'in qualche modo strano per me che si sta utilizzando PHPDriver per ORM e non AnnotationDriver, dal momento che le tue informazioni di database in classi è nelle annotazioni.

In ogni caso, se il comando php app/console doctrine:mapping:info fornisce solo 1 entità, significa che l'altro pacchetto contenente la classe Utente non è caricato nel file app/AppKernel.php. Caricare l'UserBundle aggiungendo linea

new xxx\UserBundle\xxxUserBundle(), 

all'array $bundles in registerBundles() funzione. Dopo di che, questa funzione dovrebbe essere simile a questa:

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; 
} 

Naturalmente, il cambiamento 'XX' e 'xxx' con i vostri veri nomi.

Spero che questo aiuti.

26

si stia mescolando formati di mappatura Doctrine, si hanno annotazioni e almeno un file XML in Resources/config/doctrine

Dalla documentazione di 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." 

Quindi la soluzione è:

Non è possibile combinare diversi formati di mappatura di Doctrine in un determinato pacchetto. Quindi, usate le annotazioni per tutte le entità o usate l'XML per tutti.

+0

Questo ha risolto il mio problema ed è ancora una restrizione valida in Symfony 2.1, vedi symfony.com/doc/2.1/book/doctrine.html#add-mapping-information. Grazie –

+0

grazie, onestamente. questo mi ha fatto risparmiare un sacco di ore di debugging. Non userò mai più la generazione automatica di oggetti –

3

Sono d'accordo con @ilanco 100%. Inoltre, la soluzione è RIMUOVERE qualsiasi.file xml nella cartella, ad esempio:

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

questi file XML creati quando si esegue tale comando:

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

Dung.

1

Buon giorno,

Anche se so che questo è stato inserito anni fa, ma sarà solo da pubblicare la mia risposta qui, forse potrebbe aiutare qualcuno :)

semplicemente cancellare la cache, funziona per me però

php bin/console cache:clear 

Grazie

Problemi correlati