0

Doctrine の MongoDB ODM マッピングでカスタム データ型を使用している Symfony 2 環境があります。ときどき例外を除いて、これはすべて機能します。キャッシュをクリアするか、アセットをインストールしようとすると、次のエラーが表示されることがあります。

[InvalidArgumentException]
Invalid type specified "..."

これは、キャッシュをクリアした後にコンソールに発行する次のコマンドで常に発生するようで、その後の操作はすべて成功します。Doctrine は断続的にそれを見つけるのに問題があるようです。それは、型を登録している場所と、Doctrine がマッピングを処理する時期との関係で発生する時期に関係していると思われます。

タイプは、boot()常に含まれているとは限らない別のバンドルのメソッドの一部として追加されています。

  • ここで何が起きてるの?
  • タイプが以前にロードされていることをどうにかして確認したり、構成ファイルで提供したりできますか? 私が知る限り、現在、MongoDB 構成を使用して.yml、ORM について説明されているように、ファイル内のカスタム型を指定する方法はありませ
4

2 に答える 2

0

この投稿 で良い解決策を見つけました。

簡単な答えは、追加することです

\Doctrine\ODM\MongoDB\Mapping\Types\Type::registeredType('mytype', 'My\Type\Class');

MyBundleClass::__consruct()。これにより、キャッシュでウォームアップが発生する前にタイプが登録されます。

Type::registeredType()の代わりに使用するType::addType()と、型が既に登録されているかどうかの確認を回避できます。の場合、Type::addType()既に追加されている場合は例外をスローします。

于 2013-03-16T20:10:31.903 に答える
0

上記の 2 つの質問のうち 2 番目の質問に答えるために、これに対する回避策を見つけたようですが、あまり好きではありません。適切な解決策というよりも、ハックのように感じます。

app/autoload.phpアノテーション レジストリとドライバーを登録した後、次のように呼び出します。

\Doctrine\ODM\MongoDB\Mapping\Types\Type::addType('mytype', 'My\Type\Class');

...そして、これはコンソールコマンドを呼び出すときにタイプが登録されていることを確認するようです。

于 2013-01-09T23:47:59.450 に答える