Différences
Ci-dessous, les différences entre deux révisions de la page.
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]] | ||
+ | |||
+ | |||
+ | |||