Doctrine 2.0 ReflectionException, когда я пытаюсь выполнить сопоставление YAML

У меня есть в моем cli-config.php этот код:

 $driverImpl = new \Doctrine\ORM\Mapping\Driver\YamlDriver(array(__DIR__.'/yaml'));
 $driverImpl->setFileExtension('.yml');
 $config->setMetadataDriverImpl($driverImpl);

В ./yaml находятся файлы yml (Client.yml, Worker.yml, Company.yml)

Когда я запускаю файл для создания в БД схемы с этой инструкцией:

php doctrine orm:schema-tool:create

бросает:

PHP Warning:  class_parents(): Class Client does not exist and could not be loaded in applicationPath\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222

Warning: class_parents(): Class Cliente does not exist and could not be loaded in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222
PHP Warning:  array_reverse() expects parameter 1 to be array, boolean given in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222

Warning: array_reverse() expects parameter 1 to be array, boolean given in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222
PHP Warning:  Invalid argument supplied for foreach() in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222

Warning: Invalid argument supplied for foreach() in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222



  [ReflectionException]
  Class Client does not exist

Это то же самое, что документация Doctrine http://www.doctrine-project.org/docs/orm/2.0/en/reference/yaml-mapping.html

Я не знаю, почему это происходит, есть идеи? Спасибо


person Rutenio    schedule 01.02.2011    source источник
comment
Я заметил, что первое предупреждение говорит, что Class Client не существует... а второе говорит, что Class Cliente не существует... Вы уверены, что в именах ваших классов нет опечатки?   -  person Frode    schedule 01.02.2011


Ответы (2)


IIRC, SchemaTool будет генерировать SQL на основе экземпляров ClassMetadata, а не непосредственно из ваших сопоставлений YAML. Экземпляры ClassMetadata также требуют ваших реальных классов сущностей.

Убедитесь, что в вашем инструменте командной строки все ваши классы сущностей загружены/автозагружены.

person Cobby    schedule 03.02.2011
comment
Ну, я не знаю, как я должен это сделать. Не могли бы вы показать мне пример? - person Rutenio; 07.02.2011
comment
не могли бы вы подробнее описать, что вы имеете в виду, убедитесь, что в инструменте командной строки загружены все ваши классы сущностей? - person ; 30.05.2011

Я столкнулся с той же бедой. Хитрость заключается в том, чтобы генерировать объекты из файлов yaml с параметрами --generate-annotations, установленными на 1. Я скопировал команду, которую использовал ниже:

$ doctrine orm:generate-entities --generate-annotations=1 Entities/

Что это делает, так это то, что он генерирует объекты вместе со всей информацией о сопоставлении. Теперь, если вы измените конфигурацию драйвера метаданных в своей начальной загрузке, чтобы использовать сущности вместо файлов yaml, создание схемы должно работать.

РЕДАКТИРОВАТЬ 2017-05-31 Пересматривая это через некоторое время. Это похоже на случай, когда Doctrine не может найти ваш «Class Client» из-за проблем с автозагрузкой. Вы можете исправить это, включив путь к файлу начальной загрузки/скрипту автозагрузчика в свой cli-config.php.

person s1d    schedule 27.08.2011