|
@@ -0,0 +1,32 @@
|
|
|
|
|
+# Fonctionnement des exports
|
|
|
|
|
+
|
|
|
|
|
+## Requête HTTP
|
|
|
|
|
+
|
|
|
|
|
+Pour déclencher un export, on effectue une requete POST visant une ApiResource de type ExportRequest
|
|
|
|
|
+Toutes les ApiResource implémentant l'interface ExportRequestInterface sont traitées par le DataPersister
|
|
|
|
|
+`App\DataPersister\Export\LicenceCmf\ExportRequestDataPersister`.
|
|
|
|
|
+
|
|
|
|
|
+## ExportRequestDataPersister
|
|
|
|
|
+
|
|
|
|
|
+Le ExportRequestDataPersister utilise un pattern iterable, c'est-à-dire qu'il balaie (via la classe `ExporterHandler`)
|
|
|
|
|
+tous les services implémentant `ExporterInterface` jusqu'à trouver un service qui supporte
|
|
|
|
|
+l'ExportRequest passée en paramètre.
|
|
|
|
|
+
|
|
|
|
|
+Une fois le bon service d'export trouvé, il appelle la méthode `export($exportRequest)` de ce service.
|
|
|
|
|
+
|
|
|
|
|
+## Le service d'export
|
|
|
|
|
+
|
|
|
|
|
+Les services d'export recoivent en paramètre une ExportRequest.
|
|
|
|
|
+
|
|
|
|
|
+Ils vont ensuite effectuer les opérations suivantes:
|
|
|
|
|
+
|
|
|
|
|
+1. Construire un modèle : le service génère un objet `ExportModel` (qui peut être selon les cas objet ou une collection d'objets), qui
|
|
|
|
|
+contiendra toutes les données nécessaires au rendu du template.
|
|
|
|
|
+2. Générer le HTML : le service passe ensuite le modèle au template Twig associé, et récupère le résultat au format HTML.
|
|
|
|
|
+3. Encoder : l'encodeur adapté est trouvé via la classe `EncoderHandler` qui itère sur les encoders disponibles
|
|
|
|
|
+jusqu'à trouver le premier qui supporte le format demandé dans l'ExportRequest, puis appelle la méthode `encode($html)`
|
|
|
|
|
+de cet encoder, et enfin récupère le contenu final du fichier
|
|
|
|
|
+4. Création du fichier : le service `TemporaryFileStorage` est utilisé pour créer le fichier d'export dans
|
|
|
|
|
+un répertoire temporaire.
|
|
|
|
|
+5. Mise à jour de la DB : Un objet `File` est enfin enregistré en base.
|
|
|
|
|
+
|