Aller au contenu principal

La sérialisation

Symfony, en mode --webapp, est installé et préconfiguré avec tout un ensemble de packages pour travailler en mode full-stack.

Dans ce mode, une application Symfony est capable de réceptionner une requête, router vers le bon contrôleur, appeler la base de données, puis générer une réponse HTML qu'elle renverra au client. C'est le fonctionnement du Kernel, comme on l'a aperçu dans le chapitre sur les événements.

Mais il arrivera de plus en plus souvent qu'on veuille renvoyer autre chose que du HTML.

Renvoyer du JSON​

Le cas le plus fréquent est un fonctionnement de l'application comme une API : un front-end, généralement une application Javascript, est développé pour gérer toute l'interface utilisateur.

Le serveur, (côté back-end) n'agit donc, dans ce schéma, que comme un support fournissant de la donnée brute, non formatée, au client. C'est le client qui gère l'affichage des données et les interactions avec l'utilisateur.

Le format habituellement utilisé pour échanger des données entre le front et le back est le JSON.

Mais du côté back-end, il nous faut un moyen de fournir les données dans ce format.

C'est ce qu'on appelle sérialiser les données.

La sérialisation

La sérialisation est le processus qui permet de transformer un objet PHP en un autre format (JSON, XML, YAML, CSV, etc...).

Dans le cadre d'un fonctionnement en mode API, nous nous concentrerons sur le format JSON. Mais il faut bien retenir que la sérialisation n'est pas une transformation uniquement JSON, c'est une transformation qui peut avoir pour cible d'autres formats linéarisés.

Une problématique historique​

En réalité, nous avons déjà croisé la problématique de transformation depuis PHP à un autre format, si nous avons déjà utilisé des fonctions de la SPL comme json_encode ou encore serialize.

À chaque fois se pose la question : comment, à partir d'un objet en PHP (ou bien d'un tableau), transformer cet objet dans un autre format, soit stockable en base de données, soit lisible par d'autres systèmes ?

Le composant symfony/serializer de Symfony est là pour essayer de répondre à cette question.

Le composant symfony/serializer​

À la base, le serializer de Symfony utilise 2 étapes pour sérialiser quelque chose :

  • La normalisation : Transformer l'élément à sérialiser sous forme de tableau
  • L'encodage : Transformer un tableau donné dans le format cible : JSON, XML, CSV...

Une image est disponible sur le site officiel :

Symfony serializer

Ce composant va nous être très utile pour renvoyer à un client des données issues de notre base de données, donc des instances d'entités, au format JSON.

Par ailleurs, il fournit de nombreuses options et points d'extension nous permettant de personnaliser la façon dont les données doivent être sérialisées.