odm教义注释或作曲家autoload.php无法正常工作?

时间:2019-03-15 08:00:13

标签: php mongodb yii2 doctrine doctrine-odm

我正尝试在带有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等)非常陌生根本没有帮助。我不确定还有哪些其他信息会有所帮助,否则我会予以发布。

谢谢。

1 个答案:

答案 0 :(得分:0)

因此,问题(如https://github.com/doctrine/mongodb-odm/issues/1976中所述)是autoload.php需要两次-在框架的bootstrap.php中一次,在web/index.php中一次)。删除require中的index.php行之后,一切正常。