Annotations Namespace未加载Zend Framework 2的DoctrineMongoODMModule

时间:2012-04-19 06:06:54

标签: mongodb doctrine-orm zend-framework2

我已经为zf2加载了Doctrine MongoODM模块。我的控制器里面有文件管理器,一直都很顺利,直到我试图保存文件。它失败并出现此错误:

“[语义错误]从未导入类SdsCore \ Document \ User中的注释”@Document“。

DocParser.php这一行似乎失败了         if ('\\' !== $name[0] && !$this->classExists($name)) {

失败是因为$name = 'Document',导入的注释类是'Doctrine\ODM\MongoDB\Mapping\Annotations\Doctrine'

这是我的文档类:

namespace SdsCore\Document;

/** @Document */
class User
{

/** 
 * @Id(strategy="UUID") 
 */
private $id;

/** 
 * @Field(type="string") 
 */
private $name;

/** 
 * @Field(type="string") 
 */
private $firstname;

public function get($property) 
{
    $method = 'get'.ucfirst($property);
    if (method_exists($this, $method))
    {
        return $this->$method();
    } else {
        $propertyName = $property;
        return $this->$propertyName;
    }           
}

public function set($property, $value) 
{
    $method = 'set'.ucfirst($property);
    if (method_exists($this, $method))
    {
        $this->$method($value);
    } else {
        $propertyName = $property;                
        $this->$propertyName = $value;
    }
}    

}

这是我的动作控制器:

public function indexAction()
{
    $dm = $this->documentManager;

    $user = new User();
    $user->set('name', 'testname');
    $user->set('firstname', 'testfirstname');
    $dm->persist($user);
    $dm->flush;

    return new ViewModel();
}  

1 个答案:

答案 0 :(得分:4)

我还没有在DoctrineMongoODMModule上工作,但下周我会接受它。无论如何,你仍在使用加载注释的“旧方法”。大多数学说项目现在使用Doctrine\Common\Annotations\AnnotationReader,而您的@AnnotationName告诉我您正在使用Doctrine\Common\Annotations\SimpeAnnotationReader。您可以在Doctrine\Common documentation

了解更多相关信息

以下是修复文档的方法:

<?php
namespace SdsCore\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;

/** @ODM\Document */
class User
{

    /** 
     * @ODM\Id(strategy="UUID") 
     */
    private $id;

    /** 
     * @ODM\Field(type="string") 
     */
    private $name;

    /** 
     * @ODM\Field(type="string") 
     */
    private $firstname;

    /* etc */
}