gpt4 book ai didi

php - 除非我明确调用 AnnotationDriver::getAllClassNames,否则 Doctrine 不起作用

转载 作者:可可西里 更新时间:2023-11-01 13:20:13 26 4
gpt4 key购买 nike

我是第一次尝试使用 Doctrine ORM,我正在关注 configuration found here .

执行这些步骤会直接导致以下错误:

Warning: class_parents() [function.class-parents]: Class MyProject\Model\User does not exist and could not be loaded in /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php on line 222

Warning: array_reverse() expects parameter 1 to be array, boolean given in /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php on line 222

Warning: Invalid argument supplied for foreach() in /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php on line 222

Fatal error: Uncaught exception 'ReflectionException' with message 'Class MyProject\Model\User does not exist' in /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php:67

Stack trace:

#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 on line 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);

最佳答案

听起来您没有为您的项目正确设置类加载器:

$classloader = new \Doctrine\Common\ClassLoader('MyProject', '/path/to/lib/');
$classloader->register();

调用 getAllClassNames() 解决您的问题的原因是因为它遍历/path/to/lib/MyProject/Entities 中的所有目录和文件并包含它们。显然这很慢,不推荐。

关于php - 除非我明确调用 AnnotationDriver::getAllClassNames,否则 Doctrine 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com