我已经为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();
}
答案 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 */
}