3

Doctrine MongoODM Moduleforzf2をロードしました。コントローラ内にドキュメントマネージャがあり、ドキュメントを永続化しようとするまではすべて順調でした。このエラーで失敗します:

"[セマンティックエラー]クラスSdsCore\Document\Userのアノテーション"@Doc​​ument"はインポートされませんでした。"

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\SimpeAnnotationReaderDoctrine\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 に答える