Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:symfony:extensions:jms-serializer [02/11/2019 15:06]
thierry [Annotations dans le fichier de l'Entity]
prog:symfony:extensions:jms-serializer [11/09/2022 17:36] (Version actuelle)
thierry ↷ Page déplacée de prog:symfony:bundles:jms-serializer à prog:symfony:extensions:jms-serializer
Ligne 1: Ligne 1:
-====== jms/​serializer-bundle ======+====== ​Sérialisation avec jms/​serializer-bundle ======
 ===== Installation ===== ===== Installation =====
 <​code>​ <​code>​
Ligne 142: Ligne 142:
 <note important>​Il ne faut pas utiliser les groupes en même temps que les annotation Exclude et Expose.</​note>​ <note important>​Il ne faut pas utiliser les groupes en même temps que les annotation Exclude et Expose.</​note>​
 === Annotations dans le fichier de l'​Entity === === Annotations dans le fichier de l'​Entity ===
 +Pour chaque propertie on ajoute l'​Annotation ''​@Serializer\Groups({"​Groupes d'​appartenance"​})'' ​
 <code php  [enable_line_numbers="​true",​highlight_lines_extra="​4,​15,​21,​27,​33,​39,​45,​51"​]>​ <code php  [enable_line_numbers="​true",​highlight_lines_extra="​4,​15,​21,​27,​33,​39,​45,​51"​]>​
 <?php <?php
Ligne 199: Ligne 200:
 </​code>​ </​code>​
 === Modification du Controller === === Modification du Controller ===
-<code php  [enable_line_numbers="​true",​highlight_lines_extra="​4,15,​21,​27,​33,​39,​45,​51"]>+  - (ligne 5) On rajoute la clause ''​use JMS\Serializer\SerializationContext;''​ 
 +  - (ligne 15) On rajoute le paramétre : ''​SerializationContext::​create()->​setGroups(array('​version'​))''​ a l'​appel ''​$serializer->​serialize'',​ ou ''​version''​ est le nom du groupe que l'on veut voir sérialiser. 
 +<code php  [enable_line_numbers="​true",​highlight_lines_extra="​5,​15"​]>​
 <?php <?php
 namespace App\Controller;​ namespace App\Controller;​
Ligne 217: Ligne 220:
  
 </​code>​ </​code>​
 +==== Autres Annotations ====
 +  * [[http://​jmsyst.com/​libs/​serializer/​master/​reference/​annotations]]
 +
 +==== Utiliser les evenements ====
 +On  peut utiliser les evenements : 
 +  * **serializer.pre_serialize** : l'​évènement est de type  ''​JMS\Serializer\EventDispatcher\PreSerializeEvent''​ et permet de changer le type de l'​objet à sérialiser. Il est également possible d'​accéder aux données de l'​objet à sérialiser,​ ainsi qu'au visiteur (objet utilisé pour parcourir l'​objet à sérialiser). ​
 +  * **serializer.post_serialize** : l'​évènement est de type  ''​JMS\Serializer\EventDispatcher\ObjectEvent''​ et permet de modifier le résultat de la sérialisation de l'​objet.
 +  * **serializer.pre_deserialize** : l'​évènement est de type  ''​JMS\Serializer\EventDispatcher\PreDeserializeEvent''​ et permet de modifier les données soumises à l'​application et/ou modifier le type de l'​objet à obtenir après désérialisation.
 +  * **serializer.post_deserialize** : l'​évènement est de type  ''​JMS\Serializer\EventDispatcher\ObjectEvent''​ et permet de faire des manipulations sur l'​objet désérialisé comme de la validation ou ajouter des informations à l'​objet qui pourrait provenir d'un service (API) externe par exemple.
 +
 +
 +Plus d'​infos : [[https://​openclassrooms.com/​fr/​courses/​4087036-construisez-une-api-rest-avec-symfony/​4302366-allez-plus-loin-avec-jmsserializer#/​id/​r-4302459]]
 +==== Utiliser un Handler ====
 +C'est a dire créer un méthode qui sera appelée <<à la place>>​ de la méthode ''​serialize''​ ou ''​deserialize''​.\\
 +Ce qui laisse la maîtrise totale de la sérialisation ou dé-sérialisation...
 +
 +Plus d'​infos : [[https://​openclassrooms.com/​fr/​courses/​4087036-construisez-une-api-rest-avec-symfony/​4302366-allez-plus-loin-avec-jmsserializer#/​id/​r-4302489]]
 +====== Voir aussi ======
 +  * [[https://​symfony.com/​doc/​current/​serializer.html|Doc officielle sur le sérialiseur inclus dans Symfony]]
 +  * [[prog:​symfony:​bundles:​jms-serializer-bundle]]
 +
 +
 +