Mat*_*ins 6 php orm annotations doctrine-orm
我第一次尝试使用Doctrine ORM,我正在按照此处的配置进行操作.
执行这些步骤会直接导致以下错误:
警告: class_parents()[function.class-parents]:类MyProject\Model\User不存在,无法 在第222行的/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php中加载
警告: array_reverse()期望参数1是数组, 在第222行的/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php中给出布尔值
警告: 在第222行的/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php中 为foreach()提供的参数无效
致命错误: /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php:67中未捕获的异常'ReflectionException',消息'Class MyProject\Model\User不存在'
堆栈跟踪:
#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/ 在第67行选择/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php
这个错误消失了,如果在示例代码中,我添加了以下行(用下面的注释表示),代码可以正常工作:
$driverImpl = $config->newDefaultAnnotationDriver('/path/to/lib/MyProject/Entities');
$driverImpl->getAllClassNames(); // **MY ADDED LINE**
$config->setMetadataDriverImpl($driverImpl);
Run Code Online (Sandbox Code Playgroud)
没有任何内容提到需要这个调用来使示例代码工作; 这只是我碰巧偶然发现的东西,同时在试图查看错误发生的位置时向屏幕回显一些信息.
是否需要此调用(以及示例代码中未提及的原因)?是否还应该调用其他东西,这是我原始错误的根本原因?
(我可以根据需要发布更多代码,我只是不肯定,因为这是我第一次使用Doctrine,所以最有帮助的是解决这个问题.)
编辑:我忽略了提到错误实际发生的行:
$user = $em->find('MyProject\Model\User', 1);
Run Code Online (Sandbox Code Playgroud)
听起来您没有为您的项目正确设置类加载器:
$classloader = new \Doctrine\Common\ClassLoader('MyProject', '/path/to/lib/');
$classloader->register();
Run Code Online (Sandbox Code Playgroud)
调用getAllClassNames()的原因是修复你的问题是因为它遍历/ path/to/lib/MyProject/Entities中的所有目录和文件并包含它们.显然这很慢,不推荐.