8

DoctrineMongoDBBundleを使用しようとしていますが、問題が発生しています。

私のconfig.ymlには、次のものがあります。

doctrine_mongodb:
    connections:
        default:
            server: mongodb://localhost:27017
            options:
                connect: true
    default_database: symfony2
    document_managers:
        default:
            auto_mapping: true

私のUser.phpクラス:

<?php
namespace HALL\HelloWorldBundle\Document;
use FOS\UserBundle\Document\User as BaseUser;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\Document
 */
class User extends BaseUser
{
    /** @MongoDB\Id(strategy="auto") */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

コマンドを実行すると:

 php app/console doctrine:mongodb:generate:documents HALLHelloWorldBundle

次のエラーが発生します。

[Doctrine \ Common \ Annotations \AnnotationException]
[セマンティックエラー]クラスHALL\HelloWorldBundle \ Document\Userのアノテーション"@Doc​​trine\ ODM \ MongoDB \ Mapping \ Annotations \ Document"が存在しないか、自動ロードできませんでした。

なぜ何かアイデアはありますか?注釈は明確に参照されています。

4

5 に答える 5

9

解決策が見つかりました。

http://groups.google.com/group/symfony2/browse_thread/thread/0d45a6bfe4b04ee7/645f347c77bdc3e6?show_docid=645f347c77bdc3e6

app / autoload.phpに、次を追加する必要がありました。

Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver::registerAnnotationClasses(); 

ああ、私はドキュメントが私にこれを教えてくれることを望みます...

于 2011-07-15T15:07:23.910 に答える
4

Jamieのソリューションのように注釈を登録しても、うまくいきませんでした。この問題は解決しましたが、アノテーションオブジェクトをキャッシュからシリアル化解除できないことを意味しました。このような注釈の登録:

AnnotationRegistry::registerFile(__DIR__.'/../vendor/doctrine-mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Annotations/DoctrineAnnotations.php');

キャッシュに関連する問題を発生させることなく、元の問題が解決されたことを意味します。

于 2011-07-17T13:40:36.557 に答える
1

ブートストラップにアノテーションクラスを登録する必要があります。これは2つの方法で行うことができます。リチャードによって詳述された静的呼び出しを使用します。または...

ドライバーオブジェクトでregisterAnnotationClasses()メソッドを使用できます。これはまったく同じことを行う必要がありますが、パスパラメータは必要ありません(ブートストラップでドライバを設定するときにすでに指定されているはずです)。

use \Doctrine\ODM\MongoDB\Configuration;

.........

$configuration = new Configuration();
$driver = $configuration->newDefaultAnnotationDriver($path_to_docs);
$driver->registerAnnotationClasses();
于 2012-03-08T10:12:52.207 に答える
1

DoctrineMongoDBBundleのドキュメントにある解決策

app / autoload.phpは次のようになっている必要があります:

<?php

use Doctrine\Common\Annotations\AnnotationRegistry;
use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver; <-- add this line 

$loader = require __DIR__.'/../vendor/autoload.php';

if (!function_exists('intl_get_error_code')) {
    require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
}

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

AnnotationDriver::registerAnnotationClasses();  <-- add this line

return $loader;
于 2013-12-03T22:50:18.020 に答える
0

http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html

ドキュメントでは、構成のこの部分を見つけることができます

于 2015-08-04T09:43:28.120 に答える