Symfony2 - Предупреждение: class_parents(): Класс Ambience не существует и не может быть загружен в

Я пытаюсь создать объект с помощью yml и получаю следующую ошибку:

[ErrorException]

  Warning: class_parents(): Class Ambience does not exist and could not be loaded in C:\wamp\www\demo\vendor\gedmo-doctrine-extensions\lib\Gedmo\Mapping\ExtensionMetadataFactory.php line 80

Я создал файл с именем Entities.UserTestDelete.dcm.yml в FooBundle/Resources/config/doctrine/metadata/orm.

Содержимое файла:

Entities\UserTestDelete:
  type: entity
  table: users
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    name:
      type: string
      length: 50

Затем я выполнил следующую команду:

php app/console doctrine:mapping:import "DemoFooBundle" yml

И тут я получил ошибку. Любая идея, почему это может быть проблемой?


person Georgi Angelov    schedule 30.06.2014    source источник


Ответы (2)


Просто была такая же проблема... и удалось решить...

var_dump($this) на __contruct класса исключений, в моем случае:

  • Symfony\Component\Debug\Exception\ContextErrorException

получил $message->$trace, что привело меня к:

  • поставщик/силиус/ресурс-пакет/EventListener/LoadORMMetadataSubscriber.php
  • вызывающая функция "class_parents"
  • в функции "setAssociationMappings"

Итак, быстрое решение — просто закомментировать подписанное событие:

/**
 * @return array
 */
public function getSubscribedEvents()
{
//    return array(
//        'loadClassMetadata',
//    );
}

теперь при повторном запуске "приложение/консольная доктрина: сопоставление: импорт"... ошибок больше не будет...

также, если необходимо, запустите команду mapping:convert и generate:entities, прежде чем снова включить/раскомментировать подписанное событие...

Если вы не используете Sylius, попробуйте var_dump'ировать свой класс исключений... есть большая вероятность, что у вас тоже есть какой-то Eventlistner, вмешивающийся в команду импорта Doctrine...

удачи!

person djaed    schedule 14.04.2015

Обновить
Ваша первая ошибка заключается в том, что вы создали файл yml. Как объясняется в поваренной книге, команда doctrine:mapping:import на самом деле генерирует файл. Откажитесь от своего, запустите команду и позвольте доктрине сгенерировать сам файл.
После этого вы сгенерируете фактические классы сущностей:

php app/console doctrine:mapping:convert annotation ./src
php app/console doctrine:generate:entities DemoFooBundle

Если сами таблицы еще не существуют, вы можете использовать эти последние 2 команды для создания объектов, а затем запустить

php app/console doctrine:schema:update --force

Чтобы доктрина создала для вас таблицы.


Беглый взгляд на поваренную книгу говорит мне, что имя пакета не должно заключаться в кавычки и что вы можете передать флаг --force в команду doctrine:mapping:import.
Это часть обратного проектирования

php app/console doctrine:mapping:import --force DemoFooBundle yml

Это пример, который дает поваренная книга Symfony2, только измененный для использования yml вместо формата xml.

Сообщение об ошибке также может быть связано с именем таблицы:

table: users

Где сущность называется

class Users
{}

возможный связанный с этим вопрос

person Elias Van Ootegem    schedule 30.06.2014
comment
Это дает ту же самую ошибку даже после изменения команды и изменения имени таблицы на другое имя. - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: извините, невнимательно прочитал вопрос, обновил - person Elias Van Ootegem; 30.06.2014
comment
Я выбросил созданный вручную файл yml и запустил команду. Это дало мне точно такую ​​​​же ошибку ... Есть ли какой-то конкретный файл конфигурации, который нужно установить, чтобы я мог использовать доктрину? - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: попробуйте очистить кеш доктрин (app/console doctrine:cache:clear-metadata и clear-query и clear-result) - person Elias Van Ootegem; 30.06.2014
comment
Я запускаю все три команды, и они не дали никаких результатов (нечего очищать). После этого я запустил команду, и ошибка все еще была там. - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: Они не генерируют никакого вывода , но это не значит, что они ничего не делают - person Elias Van Ootegem; 30.06.2014
comment
извините, я отредактировал свой ответ. После этого я запустил команду, и она все равно выдавала ту же ошибку. - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: взгляните на строку 80 класса ExtensionMetadataFactory (путь указан в сообщении об ошибке). Вы увидите, что классы загружаются. Однако вы, должно быть, где-то использовали класс Ambience. От него отходит какая-то сущность, или она хотя бы где-то упомянута. Однако сущность не существует. Любая приличная IDE позволит вам искать во всем проекте использование строки, искать в вашем проекте Ambience и либо определять класс, либо закомментировать бит extends. - person Elias Van Ootegem; 30.06.2014