Symfony 2控制台中偶尔出现无效类型错误
我有一个symfony2环境,在这个环境中,我使用了一个自定义数据类型和Doctrine的MongoDB ODM映射。这一切都有效,除了偶尔;当我清除缓存或安装资产时,有时会收到以下错误:Symfony 2控制台中偶尔出现无效类型错误,symfony,doctrine-odm,custom-type,doctrine-mongodb,Symfony,Doctrine Odm,Custom Type,Doctrine Mongodb,我有一个symfony2环境,在这个环境中,我使用了一个自定义数据类型和Doctrine的MongoDB ODM映射。这一切都有效,除了偶尔;当我清除缓存或安装资产时,有时会收到以下错误: [InvalidArgumentException] Invalid type specified "..." 这似乎总是发生在我清除缓存后向控制台发出的下一个命令中,以后的操作都成功了。条令似乎在间歇性地查找它时存在问题,我怀疑这与我在何处注册类型以及何时发生有关,与条令处理映射的时间有关 该类型是作为另
[InvalidArgumentException]
Invalid type specified "..."
这似乎总是发生在我清除缓存后向控制台发出的下一个命令中,以后的操作都成功了。条令似乎在间歇性地查找它时存在问题,我怀疑这与我在何处注册类型以及何时发生有关,与条令处理映射的时间有关
该类型是作为另一个捆绑包中的boot()
方法的一部分添加的,该捆绑包可能并不总是包含该类型
- 这里发生了什么
- 我是否可以确保更早加载该类型,或者在配置文件中提供它?据我所知,目前没有办法使用MongoDB配置在
文件中指定自定义类型,如ORM所述.yml
- 为了回答我上面两个问题中的第二个,我似乎已经找到了解决这个问题的方法,但我不太喜欢。它更像是一种黑客行为,而不是一种合适的解决方案
在
app/autoload.php
中,注册注释注册表和驱动程序后,我调用:
\Doctrine\ODM\MongoDB\Mapping\Types\Type::addType('mytype', 'My\Type\Class');
。。。这似乎可以确保在调用控制台命令时注册类型。我找到了一个很好的解决方案
简单的答案是补充
\Doctrine\ODM\MongoDB\Mapping\Types\Type::registeredType('mytype', 'My\Type\Class');
在MyBundleClass::\uu construct()
中。这将在缓存发生任何预热之前注册类型
使用
Type::registeredType()
而不是Type::addType()
将避免检查类型是否已注册。在Type::addType()的情况下,如果已经添加了异常,则将抛出异常。暂时标记为已回答,直到有人能够提供更好的解决方案。