Я пытаюсь использовать Doctrine ORM в первый раз, и я следую за конфигурацией, найденной здесь .
После этих шагов непосредственно возникает следующая ошибка:
Предупреждение: class_parents () [function.class-parents]: класс MyProject \ Model \ User не существует и не может быть загружен в /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php в строке 222
Предупреждение: array_reverse () ожидает, что параметр 1 будет массивом, boolean задан в /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php в строке 222
Предупреждение: неверный аргумент, предоставленный foreach () в /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php в строке 222
- Хорошая библиотека PHP ORM?
- Отношения при обновлении объекта в Symfony2 - один-на-один и один-ко-многим не работают
- Проблема с сохранением одиночной таблицы Propel
- OneToMany или OneToOne, я на правильном или неправильном пути?
- Получить результаты запроса для диапазона дат
Неустранимая ошибка: исключение исключения «ReflectionException» с сообщением «Класс MyProject \ Model \ User не существует» в /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php:67
Трассировки стека:
# 0 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php(67): ReflectionClass -> __ construct ('MyProject \ Model …')
# 1 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php(350): Doctrine \ ORM \ Mapping \ ClassMetadata -> __ construct ('MyProject \ Model …')
# 2 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php(260): Doctrine \ ORM \ Mapping \ ClassMetadataFactory-> newClassMetadataInstance ('MyProject \ Model …')
# 3 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php(169): Doctrine \ ORM \ Mapping \ ClassMetadataFactory-> loadMetadata ('MyProject \ Model …')
# 4 /opt/local/lib/php/Doctrine/ORM/EntityManager.php(247): Doctrine \ ORM \ Mapping \ ClassMetadataFactory-> getMetadataFor ('MyProject \ Model …')
# 5 /opt/local/lib/php/Doctrine/ORM/EntityManager.php(563): Doctrine \ ORM \ EntityManager-> getClassMetadata ('MyProject \ Model …')
# 6 / выберите /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php в строке 67
Эта ошибка уходит, и код отлично работает, если в примере кода я добавляю следующую строку (обозначается комментарием ниже):
$driverImpl = $config->newDefaultAnnotationDriver('/path/to/lib/MyProject/Entities'); $driverImpl->getAllClassNames(); // **MY ADDED LINE** $config->setMetadataDriverImpl($driverImpl);
Нет ничего, что указывало бы на то, что этот вызов требуется, чтобы заставить образец кода работать; это было просто то, что я случайно наткнулся, повторяя какую-то информацию на экране, пытаясь увидеть, где происходит моя ошибка.
Есть ли причина, по которой этот вызов необходим (и почему он не упоминается в примере кода)? Есть ли что-то другое, которое следует вместо этого вызывать, что является основной причиной моей первоначальной ошибки?
(Я могу опубликовать больше кода по мере необходимости, я просто не уверен, что наиболее полезно в решении этого, так как я впервые использую Doctrine.)
EDIT: Я забыл упомянуть о линии, на которой происходит ошибка:
$user = $em->find('MyProject\Model\User', 1);
Похоже, что у вас нет правильного загрузчика классов для вашего проекта:
$classloader = new \Doctrine\Common\ClassLoader('MyProject', '/path/to/lib/'); $classloader->register();
Причина, вызывающая getAllClassNames (), – это исправление вашей проблемы, потому что она проходит все каталоги и файлы внутри / path / to / lib / MyProject / Entities и включает их. Очевидно, что это медленно и не рекомендуется.
Кроме того, вы не можете загружать объекты без пространства имен. Эти классы не загружаются автоматически.