由於實體可以有多個邊界,代理對象和相關的實體,我個人更喜歡明確規定什麼是即將被序列化,像這樣:
use JsonSerializable;
/**
* @Entity
*/
class SomeEntity implements JsonSerializable
{
/** @Column(length=50) */
private $title;
/** @Column(length=50) */
private $text;
public function jsonSerialize()
{
return array(
'title' => $this->title,
'text' => $this->text,
);
}
}
然後它作爲json_encode($someEntityInstance);
一樣簡單。
您也可以使用JMSSerializerBundle來完成DRY任務。
此外,還有一個選項可以編寫自己的序列化程序來規範化數據。
UPDATE:
如果你想有一個JSON的多種表示,它可以這樣實現:
use JsonSerializable;
/**
* @Entity
*/
class SomeEntity implements JsonSerializable
{
// ...
protected $isList;
public function toList()
{
$this->isList = TRUE;
return $this;
}
private function jsonSerializeToList()
{
return [ // array representing list... ]
}
public function jsonSerialize()
{
if($this->isList) {
$normalized = $this->jsonSerializeToList();
} else {
$normalized = array(
'title' => $this->title,
'text' => $this->text,
);
}
return $normalized;
}
}
並稱爲json_encode($someEntityInstance->toList());
。無論如何,這有點髒,所以我建議與接口的想法保持一致。
是否可以創建2組jsonSerialize?例如我有帖子: 一個jsonSerialize列表:標識,標題和一個jsonSerialize的帖子詳細信息: 編號,標題,內容,標籤等 –
那麼,它應該是一致的,一樣的實體返回的原則,除非您編寫並定義自定義查詢。但是,有辦法破解它。查看更新。 – Nevertheless