doctrine odm注释或composer autoload.php不工作?
我试图在Yii2框架的项目上使用Doctrine MongoDB ODM 2.0 beta版,composer版本为1.8.4和PHP7.2,但我不断收到错误doctrine odm注释或composer autoload.php不工作?,php,mongodb,yii2,doctrine,doctrine-odm,Php,Mongodb,Yii2,Doctrine,Doctrine Odm,我试图在Yii2框架的项目上使用Doctrine MongoDB ODM 2.0 beta版,composer版本为1.8.4和PHP7.2,但我不断收到错误致命错误:未捕获错误:在布尔值上调用成员函数add(),代码运行在$loader->add('Documents',\uuu DIR\uuuuu) bootstrap.php文件(在DIR/bootstrap.php中): 然后运行composer dump autoload,并在命令行上返回生成的包含544个类的自动加载文件,但随后我遇到
致命错误:未捕获错误:在布尔值上调用成员函数add(),代码运行在$loader->add('Documents',\uuu DIR\uuuuu)代码>
bootstrap.php
文件(在DIR/bootstrap.php中):
然后运行composer dump autoload
,并在命令行上返回生成的包含544个类的自动加载文件,但随后我遇到了问题
[语义错误]类文档\消息中的批注“@Doctrine\ODM\MongoDB\Mapping\Annotations\Document”不存在,或无法自动加载
所以注释不是自动加载的,我不知道如何修复它。
在模型中,我有:
<?php
namespace Documents;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use \Doctrine\ODM\MongoDB\Mapping\Annotations\Document;
/** @ODM\Document */
class Message
{
/** @ODM\Id */
private $id;
/** @ODM\Field(type="int") */
private $sender_id;
...
那我该上哪门课呢
我很困惑,对所有这些工具(mongodb、yii2等)都很陌生,根本没有帮助。我不确定还有什么其他信息会有帮助,否则我会发布它
提前感谢。结果证明问题(如中所述)是需要两次自动加载.php
——一次在bootstrap.php
中,一次在web/index.php
(框架)中。删除index.php
中的require
行后,一切正常。。删除index.php
中的require
行后,一切正常。您是否尝试运行composer dump autoload
(或类似操作)?我记得有同样的错误,重新转储自动加载的文件工作。在运行composer dump autoload
@Etshy之前,请确保更新/安装您的所有DEP是的,我更新了,但我仍然收到致命错误:未捕获错误:在代码运行$loader->add('Documents',\uuu DIR\uuuuuuu>的布尔值上调用成员函数add()代码>很奇怪。你的C:/path/to/vendor/autoload.php中有什么内容?它应该包含另一个require autoload_real.php
并调用一个方法getLoader()
,是否在您的案例中?是的,它包含autoload_real.php
文件和getLoader()
。看起来像:require\u once\u\u DIR\u/composer/autoload_real.php';返回Composer AutoloaderInit[longstring]::getLoader()代码>是的,似乎是对的。奇怪的是,返回的$loader
是一个bool。文件autoload_real.php
中是否有类?在autoload_psr4.php
中,是否列出了注释
名称空间?根据您的配置,它可以从autoload\u static.php
而不是autoload\u psr4.php
加载,但通常是autoload\u psr4.php
。您是否尝试运行composer dump autoload
(或类似的操作)?我记得有同样的错误,重新转储自动加载的文件工作。在运行composer dump autoload
@Etshy之前,请确保更新/安装您的所有DEP是的,我更新了,但我仍然收到致命错误:未捕获错误:在代码运行$loader->add('Documents',\uuu DIR\uuuuuuu>的布尔值上调用成员函数add()代码>很奇怪。你的C:/path/to/vendor/autoload.php中有什么内容?它应该包含另一个require autoload_real.php
并调用一个方法getLoader()
,是否在您的案例中?是的,它包含autoload_real.php
文件和getLoader()
。看起来像:require\u once\u\u DIR\u/composer/autoload_real.php';返回Composer AutoloaderInit[longstring]::getLoader()代码>是的,似乎是对的。奇怪的是,返回的$loader
是一个bool。文件autoload_real.php
中是否有类?在autoload_psr4.php
中,是否列出了注释
名称空间?根据您的配置,它可以从autoload\u static.php
而不是autoload\u psr4.php
加载,但通常是autoload\u psr4.php
。
if ( ! file_exists($file = 'C:/path/to/vendor/autoload.php')) {
throw new RuntimeException('Install dependencies to run this script.');
}
$loader = require_once $file;
$loader->add('Documents', __DIR__);
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
<?php
namespace Documents;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use \Doctrine\ODM\MongoDB\Mapping\Annotations\Document;
/** @ODM\Document */
class Message
{
/** @ODM\Id */
private $id;
/** @ODM\Field(type="int") */
private $sender_id;
...
"autoload": {
"psr-4": {
"Class\\": "src/"
}
},