【问题标题】:Invalid Type Error Occasionally in Symfony 2 ConsoleSymfony 2 控制台中偶尔出现无效类型错误
【发布时间】:2013-01-09 03:56:58
【问题描述】:

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

[InvalidArgumentException]
Invalid type specified "..."

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    简短的回答是添加

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

    MyBundleClass::__consruct()。这将在缓存发生任何预热之前注册类型。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 暂时标记为已回答,直到有人可以提供更好的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      相关资源
      最近更新 更多