Call to a member function getClassAnnotations() on array
dq042000 opened this issue · 6 comments
Hi,
Running mongodb gives error:
<?php
$captchaImageMongo = new \Base\Document\CaptchaImage();
$captchaImageMongo->setFile($imgFile);
$captchaImageMongo->setSourceId($id);
$dm->persist($captchaImageMongo);
$dm->flush();
Error message:
app.error.file:
/var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Driver/AnnotationDriver.php : 81
app.error.message:
Call to a member function getClassAnnotations() on array
app.error.trace:
#0 /var/app/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriverChain.php(79): Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver->loadMetadataForClass('Base\\Document\\C...', Object(Doctrine\ODM\MongoDB\Mapping\ClassMetadata))
#1 /var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php(175): Doctrine\Persistence\Mapping\Driver\MappingDriverChain->loadMetadataForClass('Base\\Document\\C...', Object(Doctrine\ODM\MongoDB\Mapping\ClassMetadata))
#2 /var/app/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(414): Doctrine\ODM\MongoDB\Mapping\ClassMetadataFactory->doLoadMetadata(Object(Doctrine\ODM\MongoDB\Mapping\ClassMetadata), NULL, false, Array)
#3 /var/app/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(281): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata('Base\\Document\\C...')
#4 /var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php(316): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor('Base\\Document\\C...')
#5 /var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php(1742): Doctrine\ODM\MongoDB\DocumentManager->getClassMetadata('Base\\Document\\C...')
#6 /var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php(469): Doctrine\ODM\MongoDB\UnitOfWork->persist(Object(Base\Document\CaptchaImage))
#7 /var/app/module/Base/src/Captcha/Mongo.php(43): Doctrine\ODM\MongoDB\DocumentManager->persist(Object(Base\Document\CaptchaImage))
Working environment:
PHP 8.1
doctrine/mongodb-odm 2.4.2
Thanks @dq042000 for the report! I'm afraid we can't do much without a failing test case. Please take a look at our functional test suite and send as a PR with a test reproducing issue you're facing.
Thanks @malarzm for the reply,
I found the problem, but I don't know where to set it?
./vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Driver/AnnotationDriver.php:58
public function __construct($reader, $paths = null)
{
$this->reader = $reader;
$this->addPaths((array) $paths);
}
print_r $this->reader:
Array
(
[0] => module/Base/src/Document
)
This gives me the error message:
app.error.file:
/var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Driver/AnnotationDriver.php : 81
app.error.message:
Call to a member function getClassAnnotations() on array
app.error.trace:
#0 /var/app/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriverChain.php(79): Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver->loadMetadataForClass('Base\\Document\\C...', Object(Doctrine\ODM\MongoDB\Mapping\ClassMetadata))
#1 /var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php(175): Doctrine\Persistence\Mapping\Driver\MappingDriverChain->loadMetadataForClass('Base\\Document\\C...', Object(Doctrine\ODM\MongoDB\Mapping\ClassMetadata))
#2 /var/app/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(414): Doctrine\ODM\MongoDB\Mapping\ClassMetadataFactory->doLoadMetadata(Object(Doctrine\ODM\MongoDB\Mapping\ClassMetadata), NULL, false, Array)
#3 /var/app/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(281): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata('Base\\Document\\C...')
#4 /var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php(316): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor('Base\\Document\\C...')
#5 /var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php(1742): Doctrine\ODM\MongoDB\DocumentManager->getClassMetadata('Base\\Document\\C...')
#6 /var/app/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php(469): Doctrine\ODM\MongoDB\UnitOfWork->persist(Object(Base\Document\CaptchaImage))
#7 /var/app/module/Base/src/Captcha/Mongo.php(43): Doctrine\ODM\MongoDB\DocumentManager->persist(Object(Base\Document\CaptchaImage))
but I add $reader = new AnnotationReader()
to works fine:
public function __construct($reader, $paths = null)
{
$reader = new AnnotationReader();
$this->reader = $reader;
$this->addPaths((array) $paths);
}
I'm sorry but I have no idea what are you trying to do
It seems you're using ODM directly? If so you can take a look at the Symfony's bundle or Laminas' module how to wire ODM.
For anybody that gets here and happens to use Laminas: doctrine/DoctrineModule#788