2

odm:schema:create を使用してコマンド ライン ツールを実行しようとすると、次のようなエラーが発生します。

"[Semantical Error] The annotation "@Document" in class Company_Model_Auth was never imported. Did you maybe forget to add a "use" statement for this annotation?" and
"[Semantical Error] The annotation "@EmbeddedDocument" in class Company_Model_Auth was never imported. Did you maybe forget to add a "use" statement for this annotation?"

基本的にすべての注釈に対して、他のものと同様に。

「use \Doctrine\ODM\MongoDB\Mapping\Annotations\EmbeddedDocument;」を追加すると、(または \Document) ファイルに移動し、次のモデルに進みます。次に、同じクラスが欠落していることについて次のファイルで不平を言います (Document / EmbeddedDocument およびその他の注釈) 。すべてのファイルに use ステートメントを追加する必要があると予想されますか?

これが私のDocumentManagerの構築方法です::

public function _initDm() 
{
        AnnotationDriver::registerAnnotationClasses();
        $config = new Configuration();
        $config->setProxyDir(APPLICATION_PATH . '/../data/Proxies');
        $config->setProxyNamespace('Proxies');
        $config->setHydratorDir(APPLICATION_PATH . '/../data/Hydrators');
        $config->setHydratorNamespace('Hydrators');
        $config->setMetadataDriverImpl(AnnotationDriver::create(APPLICATION_PATH . '/models'));     

        // Pull in mongo db connection options from application.ini
        $options = $this->getOption('mongo');
        $config->setDefaultDB($options['database']);

        // Create a DocumentManager and store in ZendRegistry
        $dm = DocumentManager::create(new Connection($this->_createMongoDbConnectionString($options)), $config);
        Zend_Registry::set('dm', $dm); 
}

再確認したところ、./repos/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Annotations/DoctrineAnnotations.php ファイルが確実にヒットしており、require_once が適切な注釈ファイルです。

composer によってプロビジョニングされたバージョン:

"doctrine/common": "2.3.0-RC3",
"doctrine/mongodb": "1.0.1",
"doctrine/mongodb-odm": "1.0.0-BETA7",
"symfony/console": "2.1.*@dev",

すべてのファイルに use ステートメントを追加する必要はないと思うので、助けていただければ幸いです。

4

1 に答える 1

10

注釈パーサーでは、使用前に注釈クラスをインポートする必要があります。各注釈クラスを明示的にインポートする代わりに、次のようなことを行うことができます (テスト スイートから持ち上げます)。

<?php

namespace Documents;

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

/**
* @ODM\Document
*/
class User
{
    /** @ODM\Id */
    protected $id;

    /** @ODM\Field(type="string") */
    protected $username;

    // Other fields follow...
}
于 2013-02-01T20:30:35.827 に答える