Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
doctrine odm注释或composer autoload.php不工作?_Php_Mongodb_Yii2_Doctrine_Doctrine Odm - Fatal编程技术网

doctrine odm注释或composer autoload.php不工作?

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个类的自动加载文件,但随后我遇到

我试图在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个类的自动加载文件,但随后我遇到了问题

[语义错误]类文档\消息中的批注“@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/"
        }
    },