例如,我有兩個實體:主(父)實體(例如User
)和從屬實體(Post
)。我想使用JMS序列化器序列化User
實體,並提供其第一個發佈日期的其他信息。存儲在數據庫中的發佈日期是timestamp int,但我想用我的幫助器(只是一個服務)將其轉換爲int,並將其轉換爲一些格式化的sting。複雜序列化
嘗試在實體類中使用方法創建virtual_property
,但未能將我的幫助器注入到實體類中。解決這個問題對我來說,唯一的辦法是自己序列化爲控制器:
public function someAction()
{
$serializedUser = $this->serializeEntity($user);
}
public function serializeEntity(User $user)
{
// JMS serialization
$user = $this->get('jms_serializer')->serialize($user, 'array');
if ($user->getPosts()->count()) {
$post = $user->getPosts()->first();
$user['first_post_date'] = $this->get('my_helper_service')->dateFormat($post->getDate());
}
return $user;
}
注意:這個例子是合成的,在現實世界中我有更復雜的方法,而不僅僅是日期格式。但主要想法是一樣的。
我覺得應該有更好的方法來做到這一點。
我認爲有關事件,但將在每一個序列化這一事件火?如果我有幾個實體,我想填充它,代碼中會包含很多'SomeEntity的if($ event-> getObject()實例){$ this-> someEntityFormat($ event); }' – Aliance