Skip to content

Instantly share code, notes, and snippets.

@rkueny
Last active October 2, 2019 07:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rkueny/7320f6e2350ae422b83823f47b067e2d to your computer and use it in GitHub Desktop.
Save rkueny/7320f6e2350ae422b83823f47b067e2d to your computer and use it in GitHub Desktop.

Commande Symfony

L'objectif de cet exercice est de créer une commande personnalisée dans Symfony pour importer des data.

Data

Rendez-vous sur https://www.data.gouv.fr/ et choisissez un jeu de données des communes (CSV ou Excel). (https://www.data.gouv.fr/fr/datasets/base-officielle-des-codes-postaux) Téléchargez-le et placez le dans un dossier 'fixtures'.

src > Resources > fixtures > data

On appelle fixtures, les données de base ou de test d'un projet. Cela peut être des données pour la BDD mais aussi des images ou des média.

Entity

Créez une entité correspondant à vos données. Par exemple, si vous choisissez le fichier des communes de France, votre entité sera formée ainsi :

  • Nom
  • Code Postal
  • Numéro INSEE
  • Coordonnées GPS

Une fois l'entité crée, vous pouvez passer à la création de la commande.

Command

Le but de la commande est d'aller lire le fichier de données, et pour chaque ligne de data, créer une entité et l'enregistrer en BDD.

Vous pouvez travailler directement dans le AppBundle pour y créer un dossier Command. Créez ensuite votre classe PHP ImportDataTownCommand.php

Si votre fichier de données est gros ( + de 20 000 lignes), il faut faire attention à l'optimisation. Et ne persiter les données que toutes les 20 lignes.

Afin de savoir où en est l'import, il est nécessaire de créer un preloader (ou un décompte) qui se met à jour à chaque nouvelle ligne enregistrée.

API

Maintenant que tout est en BDD, il faut créer une API Rest pour lire ces données.

Doc

Utilisez ce bundle pour générer une documentation digne de ce nom. Ainsi vos futurs utilisateurs pourront utiliser l'API facilement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment