Я пытаюсь использовать бета-версию Doctrine MongoDB ODM 2.0 в проекте с каркасом Yii2, с версией Composer 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
, но затем у меня возникла проблема
[Семантическая ошибка] Аннотация "@Doctrine \ ODM \ MongoDB \ Mapping \ Annotations \ Document" в классе Documents \ Message не существует или не может быть загружена автоматически.
Итаканнотации не загружаются автоматически, и я понятия не имею, как это исправить.В модели, которую я имею:
<?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.json
) строки:
"autoload": {
"psr-4": {
"Class\\": "src/"
}
},
, но тогда какой класс я должен загружать?
Я очень растерялся и былдовольно плохо знаком со всеми этими инструментами (mongodb, yii2 и т. д.).Я не уверен, какая другая информация была бы полезна, иначе я бы опубликовал ее.
Заранее спасибо.