我有一個數據庫結構,其中有一個字段content
。在數據庫中,這是一個BLOB
(所以一個string
)。 content
包含一個JSON編碼的字符串。Symfony2原則更改實體負載的值
當我加載這個,我想加載到一個特定的Content
對象(不同的Content
子類爲JSON的每種可能的格式)。
是否有任何事件或任何東西,我可以連上,所以我可以趕上實體是內置前值(所以我可以有setContent()
類型一絲Content
類,而不必是通用的,我會如果信息在攔截前被加載到實體中,則必須執行此操作)。
任何想法?
更多的細節。基本上我想象的是有某種類的Factory類,它接受一個JSON字符串並將其轉換爲適當的對象。
{
body: "ABC",
value: 5
}
去一個類的對象是這樣的:
class MyContent extends Content
{
protected $body;
protected $value;
}
我不能用典型的對象映射,因爲它是一個JSON字符串的對象。
進一步澄清
基本上,我有一個名爲Box
的實體。 Box
的值爲content
,該值應該是Content
的實例。
在正常情況下,如果Content
是一個正常的數據庫實體,我只想掛鉤Box
和Content
之間的一對一的關係,這將在該Box
正確加載Content
,而無需做任何特殊。
但是,在這種情況下,Content
可以有多種形式。要處理這個問題,它將作爲一個JSON對象存儲在Box
的表中的BLOB
字段中。這意味着當學說試圖加載Box
時,它會嘗試加載一個字符串。
我可以簡單地讓Box::setContent()
接受任何參數並根據它是否爲字符串或Content
對象來處理它。
然而,我想它,以便當它被用來它是總是一個Content
對象,所以想要類型暗示爲函數(即,Box::setContent(Content $content)
)。問題是這會阻止Doctrine向該字段提供字符串。
這就是爲什麼我想攔截content
的原則所取的值,並在將其加載到實體Box
之前用適當的對象替換它。
我不認爲任何的教義事件都是我想要的,所以它可能不是真的。= S
有一個(https://doctrine-orm.readthedocs.org/en/latest/reference/events.html?highlight=lifecycle#lifecycle-events)在可用[生命週期事件列表]文檔。不確定哪一個可能會用於您的案例,可能需要更多信息 – 2013-03-22 23:45:19
在實體類的構造函數中加載內容對象怎麼樣? – Sethunath 2013-03-23 06:31:48