我有一個Dashboard
實體正確序列化/反序列化由JMSSerializer(通過JMSSerializerBundle):如何更改主義實體的屬性的序列化編程
/**
* @ORM\Table(name="dashboard", schema="myappID")
* @ORM\Entity(repositoryClass="Belka\MyBundle\Entity\Repository\DashboardRepository")
*/
class Dashboard
{
/**
* @Id
* @Column(type="integer")
* @GeneratedValue("SEQUENCE")
*
* @Serializer\Groups({"o-all", "o-all-getCDashboard", "i-p2-editDashboard"})
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="Belka\MyBundle\Entity\User")
*
* @ORM\JoinTable(name="users_dashboards_associated",
* schema="myAppID",
* joinColumns={@ORM\JoinColumn(name="dashboard_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
* )
*
* @Serializer\groups({
* "o-p2-create",
* "i-p2-create",
* "o-p2-patch",
* "i-p2-editDashboard"
* })
*/
protected $users;
}
和我使用JMSSerializer的jms_serializer.doctrine_object_constructor
爲對象的構造函數。 一切都像魅力,但我有以下的角落案件:有時我必須設置Dashboard::$users
作爲一個字符串(即當客戶端發送語義錯誤users
屬性,在我檢查後,我返回對象與一個字符串,以便通知它,這對前端應用程序來說非常方便)。 JMSSerializer takes advantage of the Doctrine's annotation,但在這種情況下,我真的想以編程方式覆蓋它,因爲是一個非常特殊的情況。兩個都在我的腦海方式:
- 是否有爲了設置
SerializationContext
映射Dashboard::$users
爲一個字符串屬性的方法嗎? - 有沒有一種方法可以在序列化之前改變原則的元數據?
- 其他選項我沒有意識到?
任何一塊的建議是多人歡迎
也許通過[events](http://jmsyst.com/libs/serializer/master/event_system)? – Veve
@Veve我想你是對的。看看我自己的anser :) – Bertuz