3

我已经为 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();
}  
4

1 回答 1

4

我还没有工作DoctrineMongoODMModule,但我会在下周完成。无论如何,您仍在使用加载注释的“旧方式”。大多数学说项目现在都在使用Doctrine\Common\Annotations\AnnotationReader,而你@AnnotationName告诉我你正在使用Doctrine\Common\Annotations\SimpeAnnotationReader. 您可以在Doctrine\Common 文档中阅读更多相关信息

因此,以下是修复文档的方法:

<?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 */
}
于 2012-04-19T10:31:55.603 回答