Symfony2 - DoctrineMongoDBBundle - Doctrine\Common\Annotations\AnnotationException

Flu*_*key 8 doctrine symfony doctrine-orm doctrine-odm

我正在尝试使用DoctrineMongoDBBundle,但是,我遇到了一个问题.

在我的config.yml中,我有:

doctrine_mongodb:
    connections:
        default:
            server: mongodb://localhost:27017
            options:
                connect: true
    default_database: symfony2
    document_managers:
        default:
            auto_mapping: true
Run Code Online (Sandbox Code Playgroud)

我的User.php类:

<?php
namespace HALL\HelloWorldBundle\Document;
use FOS\UserBundle\Document\User as BaseUser;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\Document
 */
class User extends BaseUser
{
    /** @MongoDB\Id(strategy="auto") */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行命令时:

 php app/console doctrine:mongodb:generate:documents HALLHelloWorldBundle
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[Doctrine\Common\Annotations\AnnotationException]
[语义错误]类HALL\HelloWorldBundle\Document\User中的注释"@Doctrine\ODM\MongoDB\Mapping\Annotations\Document"不存在,或者无法自动加载.

有什么想法吗?注释被明确引用.

Flu*_*key 9

找到解决方案

http://groups.google.com/group/symfony2/browse_thread/thread/0d45a6bfe4b04ee7/645f347c77bdc3e6?show_docid=645f347c77bdc3e6

在app/autoload.php中,我需要添加:

Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver::registerAnnotationClasses(); 
Run Code Online (Sandbox Code Playgroud)

啊,我希望文件能告诉我这个......


小智 4

像 Jamie 的解决方案中那样注册注释对我来说不起作用。它解决了这个问题,但意味着注释对象无法从缓存中反序列化。像这样注册注释:

AnnotationRegistry::registerFile(__DIR__.'/../vendor/doctrine-mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Annotations/DoctrineAnnotations.php');
Run Code Online (Sandbox Code Playgroud)

意味着原来的问题已经解决,没有引入与缓存相关的问题。