Ошибка Symfony2: не найден файл сопоставления с именем - PullRequest
9 голосов
/ 02 марта 2012

Я использую Symfony2, и когда я пытаюсь сгенерировать схему ($ php app / console doctrine: generate: schema), я получаю сообщение об ошибке ..


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

У меня только 2 пакета в проекте:

  • UserBundle
  • FileBundle

Я соединяю FileBundle с UserBundle с помощью этого кода:


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

Заголовкифайлы выглядят примерно так:


    
    namespace xx\UserBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;

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

FileBundle очень похож .. Спасибо!

Ответы [ 5 ]

26 голосов
/ 27 апреля 2012

Вы смешиваете форматы отображения Doctrine, у вас есть аннотации и по крайней мере один XML-файл в Resources / config / doctrine

Из документации 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."

Итак, решение:

Вы не можете смешивать различные форматы отображения Doctrine в данном комплекте.Поэтому либо используйте аннотации для всех объектов, либо используйте XML для всех.

4 голосов
/ 04 октября 2015

Я согласен с @ilanco 100%. Кроме того, решение - УДАЛИТЬ любой XML-файл в папке, например:

C: \ XAMPP \ HTDOCS \ localxyz \ SRC \ AppBundle / Ресурсы / конфигурации / Доктрина / Comment.orm.xml

эти xml-файлы создаются при запуске такой команды:

C: \ xampp \ htdocs \ localxyz> php app / console доктрина: отображение: импорт --force AppBundle xml

Навоз.

4 голосов
/ 25 марта 2012

Мне как-то странно, что вы используете PHPDriver для ORM, а не AnnotationDriver, поскольку информация о вашей базе данных в классах представлена ​​в аннотациях.

В любом случае, если команда php app/console doctrine:mapping:info дает вам только 1 сущность, это означает, что ваш другой пакет, содержащий класс User, не загружен в файл app / AppKernel.php.Загрузите свой UserBundle, добавив строку

new xxx\UserBundle\xxxUserBundle(),

в массив $bundles в функции registerBundles().После этого эта функция должна выглядеть примерно так:

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

Конечно, замените 'xx' и 'xxx' настоящими именами.

Надеюсь, это поможет.

1 голос
/ 19 февраля 2017

Добрый день,

Хотя я знаю, что это было опубликовано несколько лет назад, но просто хотел бы опубликовать мой ответ здесь, возможно, это могло бы кому-то помочь:)

просто очистить кеш, у меня работает, хотя

php bin/console cache:clear

Спасибо

0 голосов
/ 02 марта 2012

Я не могу придумать причину, по которой это происходит, но я сделаю прыжок здесь.

Попробуйте отредактировать config.yml. doctrine раздел должен выглядеть так:

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

Обратите внимание на список mappings внизу. Все связки, которые «связаны», включены сюда.

Надеюсь, это поможет ....

...