我正在尝试使用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不存在,或者不存在 自动加载。
任何想法为什么?注释被明确引用。
答案 0 :(得分:9)
找到解决方案。
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
在文档中,您可以找到配置的这一部分