# 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 `LocalStorage` 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.