2013-01-09 47 views
0

我有一個Symfony 2環境,在這個環境中我使用了Doctrine的MongoDB ODM映射的自定義數據類型。這一切都有效,偶爾除外;當我去清除緩存或者安裝資產有時我會收到以下錯誤:Symfony 2控制檯偶爾會出現無效的類型錯誤

[InvalidArgumentException] 
Invalid type specified "..." 

這似乎總是與下一個命令我發出到控制檯發生後,我已清除緩存,後續操作全部成功。學說似乎間歇性地發現它,我懷疑它與我在哪裏註冊類型以及什麼時候發生與Doctrine處理映射時的關係有關。

該類型作爲boot()方法的一部分添加到另一個包中,該包可能並不總是包含在內。

  • 這裏發生了什麼事?
  • 我可以以某種方式確保類型被加載的更早,或提供它在配置文件?據我所知,目前沒有辦法使用MongoDB配置來指定.yml文件中的自定義類型,如ORM here所述。

回答

0

我找到了很好的解決方案in this post

簡短的回答是在MyBundleClass::__consruct()添加

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

。在緩存發生任何熱身之前,這將獲得已註冊的類型。

使用Type::registeredType()而不是Type::addType()將避免檢查以查看該類型是否已經註冊。在Type::addType()的情況下,如果它已被添加,則會引發異常。

0

要回答上面兩個問題中的第二個,我似乎找到了解決方法,但我不太喜歡它。這感覺更像是一個黑客而不是一個適當的解決方案。

app/autoload.php我註冊註釋註冊表和驅動程序後,我打電話:

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

...這似乎保證調用控制檯命令時,類型被註冊。

+0

標記爲現在回答,直到有人有更好的解決方案,他們可以提供。 –