0

我有一个 Symfony 2 环境,在其中我使用自定义数据类型和 Doctrine 的 MongoDB ODM 映射。这一切都有效,除了偶尔;当我去清除缓存或安装资产时,有时会收到以下错误:

[InvalidArgumentException]
Invalid type specified "..."

这似乎总是发生在我清除缓存后向控制台发出的下一个命令中,以后的操作都成功了。Doctrine 似乎间歇性地发现它有问题,我怀疑这与我在哪里注册类型以及何时发生与 Doctrine 处理映射的时间有关。

该类型作为boot()方法的一部分添加到另一个包中,可能并不总是包含在内。

  • 这里发生了什么?
  • 我能否以某种方式确保该类型较早加载,或者在配置文件中提供它?据我所知,目前还没有办法使用 MongoDB 配置在文件中指定自定义类型,如此.yml的 ORM 所述。
4

2 回答 2

0

为了回答上面两个问题中的第二个,我似乎找到了解决方法,但我不太喜欢它。感觉更像是一个 hack,而不是一个适当的解决方案。

app/autoload.php我注册注解注册表和驱动程序之后,我调用:

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

...这似乎是为了确保在调用控制台命令时注册类型。

于 2013-01-09T23:47:59.450 回答
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 回答