Symfony 2控制台中偶尔出现无效的类型错误

时间:2013-01-09 03:56:59

标签: symfony doctrine-odm custom-type doctrine-mongodb

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

[InvalidArgumentException]
Invalid type specified "..."

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

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

  • 这里发生了什么事?
  • 我可以以某种方式确保先前加载类型,或者在配置文件中提供它吗?据我所知,目前无法使用MongoDB配置在.yml文件中指定自定义类型,如针对ORM here所述。

2 个答案:

答案 0 :(得分:0)

为了回答上述两个问题中的第二个问题,我似乎找到了解决这个问题的方法,但我不太喜欢它。感觉更像是黑客而不是正确的解决方案。

在注册注释注册表和驱动程序后的app/autoload.php中,我调用:

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

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

答案 1 :(得分:0)

我找到了一个很好的解决方案in this post

简短的回答是添加

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

。这将获得在缓存发生任何预热之前注册的类型。

使用Type::registeredType()代替Type::addType()将避免检查该类型是否已注册。在Type::addType()的情况下,如果已经添加了异常,则会抛出异常。