我有一个Symfony 2环境,我在其中使用带有Doctrine的MongoDB ODM映射的自定义数据类型。这一切都有效,偶尔除外;当我去清除缓存或安装资产时,我有时会收到以下错误:
[InvalidArgumentException]
Invalid type specified "..."
这似乎总是发生在我清除缓存后我向控制台发出的下一个命令,以后的操作都成功了。 Doctrine似乎间歇性地找到了它的问题,我怀疑它与我在哪里注册类型以及何时发生与Doctrine处理映射的关系有关。
该类型作为boot()
方法的一部分添加到另一个包中,可能并不总是包含在内。
.yml
文件中指定自定义类型,如针对ORM here所述。答案 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()
的情况下,如果已经添加了异常,则会抛出异常。