我正尝试在带有Yii2框架,Composer版本1.8.4和PHP 7.2的项目上使用Doctrine MongoDB ODM 2.0 beta,但在代码运行{{1 }}
Fatal error: Uncaught Error: Call to a member function add() on boolean
文件(在DIR / bootstrap.php中):
$loader->add('Documents', __DIR__);
我已经尝试查看How to properly Autoload Doctrine ODM annotations?和Laravel & Couchdb-ODM - The annotation "@Doctrine\ODM\CouchDB\Mapping\Annotations\Document" does not exist, or could not be auto-loaded以及其他很多我不太想获得帮助的线程,但是我找不到解决方案。
我还尝试注释掉下面的行
bootstrap.php
并运行<?php
use Doctrine\Common\Annotations\AnnotationRegistry;
use Doctrine\ODM\MongoDB\Configuration;
use Doctrine\ODM\MongoDB\DocumentManager;
use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver;
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']);
$config = new Configuration();
$config->setProxyDir(__DIR__ . '/Proxies');
$config->setProxyNamespace('Proxies');
$config->setHydratorDir(__DIR__ . '/Hydrators');
$config->setHydratorNamespace('Hydrators');
$config->setDefaultDB('fsa');
$config->setMetadataDriverImpl(AnnotationDriver::create(__DIR__ . '/Documents'));
$dm = DocumentManager::create(null, $config);
,并在命令行上返回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']);
,但随后我遇到了问题
[语义错误]类Documents \ Message中的注释“ @Doctrine \ ODM \ MongoDB \ Mapping \ Annotations \ Document”不存在,或者无法自动加载。
因此,注释不会自动加载,我也不知道如何解决该问题。 在模型中,我有:
composer dump-autoload
我还在https://github.com/doctrine/mongodb-odm/issues/1976的github上发布了一个线程。一位评论者说:“默认情况下,作曲家的自动加载文件会返回有问题的自动加载器,对您而言似乎并非如此。”我该如何解决?我在网上可以找到的唯一信息是将行放在Generated autoload files containing 544 classes
内:
<?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等)非常陌生根本没有帮助。我不确定还有哪些其他信息会有所帮助,否则我会予以发布。
谢谢。
答案 0 :(得分:0)
因此,问题(如https://github.com/doctrine/mongodb-odm/issues/1976中所述)是autoload.php
需要两次-在框架的bootstrap.php
中一次,在web/index.php
中一次)。删除require
中的index.php
行之后,一切正常。