我第一次尝试使用 Doctrine ORM,我正在按照此处找到的配置。
执行这些步骤会直接导致以下错误:
警告: class_parents() [function.class-parents]: Class MyProject\Model\User 不存在,无法 在第222 行的/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php中加载
警告: array_reverse() 期望参数 1 是数组,布尔值在 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php 第222行
警告:在第222 行的/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php中 为 foreach() 提供的参数无效
致命错误: /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php:67 中的消息“Class MyProject\Model\User 不存在”未捕获的异常“ReflectionException”
堆栈跟踪:
#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 in /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。)
编辑:我忽略了实际发生错误的行:
$user = $em->find('MyProject\Model\User', 1);