Ich habe eine Dashboard
Entity richtig serialisiert/deserialisiert von JMSSerializer (durch JMSSerializerBundle):wie Serialisierung einer Lehre Entity des Attributs ändern programmatisch
/**
* @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;
}
und ich bin mit JMSSerializer des jms_serializer.doctrine_object_constructor
als Objektkonstruktor. Alles funktioniert wie Charme, aber ich habe den folgenden Eckfall: manchmal muss ich Dashboard::$users
als String setzen (dh wenn der Client eine semantisch-inkorrekte users
Eigenschaft sendet, gebe ich nach meinen Checks das Objekt zusammen mit einem String zurück Informieren Sie es. Dies ist ziemlich praktisch für die Front-End-Anwendungen). JMSSerializer takes advantage of the Doctrine's annotation, aber in diesem Fall möchte ich es wirklich programmgesteuert überschreiben, da es ein sehr Eckfall ist. Zwei sind die Wege, auf meinem Verstand:
- Gibt es eine Möglichkeit, um das zu setzen
SerializationContext
Dashboard::$users
als String-Eigenschaft auf der Karte? - Gibt es einen Weg, um die Metadaten des Doctrine zu ändern, bevor Sie es serialisieren?
- Andere Optionen, die ich nicht realisiert habe?
Jedes Stück Vorschlag ist mehr als willkommen
Vielleicht über [events] (http://jmyst.com/libs/serializer/master/event_system)? – Veve
@Veve Ich denke du hattest recht. Schau dir meinen eigenen Anser an :) – Bertuz