php - 学说 odm 注释或作曲家 autoload.php 不起作用?
问题描述
我正在尝试在带有 Yii2 框架的项目中使用 Doctrine MongoDB ODM 2.0 beta,作曲家版本为 1.8.4 和 PHP 7.2,但我不断收到Fatal error: Uncaught Error: Call to a member function add() on boolean
代码运行的错误$loader->add('Documents', __DIR__);
bootstrap.php
文件(在 DIR/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);
我已经尝试查看如何正确地自动加载 Doctrine ODM 注释?和Laravel & Couchdb-ODM - 注释 "@Doctrine\ODM\CouchDB\Mapping\Annotations\Document" 不存在,或者无法自动加载,还有许多其他线程我不太记得寻求帮助,但是我想不出解决办法。
我还尝试注释掉下面的行
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']);
composer dump-autoload
并在命令行上运行并返回Generated autoload files containing 544 classes
,但后来我遇到了问题
[语义错误] 类 Documents\Message 中的注释“@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;
...
我还在 github 上的https://github.com/doctrine/mongodb-odm/issues/1976上发布了一个帖子。一位评论者表示:“默认情况下,composer 自动加载文件会返回有问题的自动加载器,但您似乎并非如此。” 我该如何解决?我能在网上找到的唯一信息是把(里面composer.json
)这些行:
"autoload": {
"psr-4": {
"Class\\": "src/"
}
},
但是我应该加载什么类?
我很困惑,对所有这些工具(mongodb、yii2 等)都很陌生,根本没有帮助。我不确定还有哪些其他信息会有所帮助,否则我会发布它。
提前致谢。
解决方案
事实证明,问题(如https://github.com/doctrine/mongodb-odm/issues/1976中提到的)是autoload.php
需要两次 - 一次bootstrap.php
和一次web/index.php
(框架)。require
删除线路后index.php
,一切正常。
推荐阅读
- tensorflow - 如果 D-Drive 中安装了 anaconda,如何使用 TensorFlow GPU?
- c# - 如何比较具有相同属性的两个视图模型,如果属性的值不同,则将该属性添加到不同的列表中?
- google-bigquery - 我可以从 Can 存储传输到 BigQuery 的最大文件大小是多少
- python - 如何在 Python 中使用正则表达式检测以空格分隔的数字?
- sql-server - 使用 SSIS 将 Excel 文件中的数据以及文件名加载到 SQL Server 的方法
- java - 如何从 putty 远程下载最新的 JDK8
- angular - 升级到 WKWebview 进行本地化时,角翻译提供密钥
- css - 堆叠多个字体真棒图标
- python - ALB 响应时间和 Newrelic Web 响应时间之间的巨大差异
- php - json对象原始数据字段到php数组中