我有一个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