Symfony2 Error: No mapping file found named

匿名 (未验证) 提交于 2019-12-03 01:46:01

问题:

I am using Symfony2 and when i try to generate the schema ($ php app/console doctrine:generate:schema) i got an error..

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

I only have 2 Bundles in the proyect:

  • UserBundle
  • FileBundle

I connect the FileBundle with the UserBundle with this code:

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

The headers of the files are something like this:

          namespace xx\UserBundle\Entity;      use Doctrine\ORM\Mapping as ORM;      /**       * @ORM\Entity      **/     class User     { ###...###}      

FileBundle is very similar.. Thanks!

回答1:

You are mixing Doctrine mapping formats, you have annotations and at least one XML file in Resources/config/doctrine

From the symfony docs:

"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."

So the solution is:

You cannot mix different Doctrine mapping formats in a given bundle. So either use annotations for all entities or use XML for all.



回答2:

It is somehow strange to me that you're using PHPDriver for ORM and not AnnotationDriver, since your database info in classes is in annotations.

Anyhow, if php app/console doctrine:mapping:info command gives you only 1 entity that means that your other bundle containing User class is not loaded in app/AppKernel.php file. Load your UserBundle by adding line

new xxx\UserBundle\xxxUserBundle(),

to the $bundles array in registerBundles() function. After that, this function should look something like this:

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

Of course, change 'xx' and 'xxx' with your real names.

Hope this helps.



回答3:

I agree with @ilanco 100%. In addition, the solution is to REMOVE any .xml file in folder, for example:

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

these xml files created when you run such command:

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

Dung.



回答4:

Good day,

Although I know that this has been posted years ago, but will just like to post my answer here, perhaps it could help someone :)

just simply clear the cache, it works for me though

php bin/console cache:clear

Thanks



回答5:

I can't think of a reason why this is happening but I will take a leap here.

Try editing your config.yml. doctrine section should look like this:

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

Notice the mappings list on the bottom. All bundles which are "linked" are included here.

Hope this helps....



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!