Symfony2 - DoctrineMongoDBBundle - Doctrine \ Common \ Annotations \ AnnotationException

时间:2011-07-15 14:43:33

标签: symfony doctrine-orm doctrine 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

我的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
    }
}

当我运行命令时:

 php app/console doctrine:mongodb:generate:documents HALLHelloWorldBundle

我收到以下错误:

  

[学说\共同\注解\ AnnotationException]
  [语义错误]注释   课堂上的“@Doctrine \ ODM \ MongoDB \ Mapping \ Annotations \ Document”   HALL \ HelloWorldBundle \ Document \ User不存在,或者不存在   自动加载。

任何想法为什么?注释被明确引用。

5 个答案:

答案 0 :(得分: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(); 

啊,我希望文档告诉我这个....

答案 1 :(得分:4)

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

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

意味着在没有引入与缓存有关的问题的情况下解决了原始问题。

答案 2 :(得分:1)

您应该在bootstrap上注册注释类,这可以通过两种方式完成。使用Richard详细说明的静态调用。还是......

您可以在驱动程序对象上使用registerAnnotationClasses()方法。这应该完全相同,但不需要路径参数(因为在引导程序上设置驱动程序时应该已经给出了它。)

use \Doctrine\ODM\MongoDB\Configuration;

.........

$configuration = new Configuration();
$driver = $configuration->newDefaultAnnotationDriver($path_to_docs);
$driver->registerAnnotationClasses();

答案 3 :(得分:1)

Documentation of DoctrineMongoDBBundle

中的解决方案

你的app / autoload.php必须是这样的:

<?php

use Doctrine\Common\Annotations\AnnotationRegistry;
use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver; <-- add this line 

$loader = require __DIR__.'/../vendor/autoload.php';

if (!function_exists('intl_get_error_code')) {
    require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
}

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

AnnotationDriver::registerAnnotationClasses();  <-- add this line

return $loader;

答案 4 :(得分:0)

http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html

在文档中,您可以找到配置的这一部分