Création d'un projet Symfony

Nous allons voir dans cet article comment créer une application de réservation en ligne à destination des restaurants qui proposent une livraison à domicile ou un retrait sur place.

Voici les étapes que nous allons suivre :

Le code final sera disponible sur ce repository github.

On pose le problème et on modélise les données

J'utiliserai l'outil en ligne draw.io pour modéliser les données.

Voici ce que l'on souhaite mettre en place :

On a donc identifié nos trois éléments, qui vont devoir être représentés sous forme de table dans notre base de données MySQL, et sous forme d'objets dans Symfony. Nous ne gérerons pas directement les tables, nous allons passer via Doctrine pour les gérer, afin de voir comment cela fonctionne.

Pour chaque élément il faut identifier quelles sont les informations qui le caractérise. Je m'en tiendrai à des informations simples. modele des données

Il nous reste à définir des relations entre ces trois entités. De façon instinctive, on peut dire qu'un client passe une commande qui peut contenir plusieurs produits. Un client peut passer plusieurs commandes qui pourront être "en attente", "livrées"... On aura donc une relation plusieurs à plusieurs entre client et commande, et une autre relation plusieurs à plusieurs entre commande et produit.

On vient de faire le plus compliqué pour notre application : définir notre objectif, et les éléments qui vont intéragir entre eux pour parvenir à cet objectif. La suite va être rapide grâce à l'utilisation de Symfony.

On créé le projet et on le configure

Je me place dans la racine de travail de mon répertoire web (www/), j'ouvre un terminal et je créé mon projet que je vais appelé "reservation" : J'utilise ici Symfony 3, avec l'installateur, tout simplement car je n'ai pas accès à PHP 7 en production pour le moment, si vous avez la configuration pour supporter Symfony 4, utilisez le !

$ php symfony.phar new reservation 3

Par facilité et rapidité, je vais garder le projet en l'état et je vais me baser sur ce qui existe déjà en ajoutant simplement ce que j'ai besoin. Je travaillerai donc avec le bundle par défaut "AppBundle", et avec tous les fichiers par défaut le plus possible, notamment pour les templates. Allez vérifier si tout est bien déployé, en allant voir localhost/reservation/web/app_dev.php

On créé les tables, les classes

Symfony est bien installé, on va pouvoir créer nos entités qui correspondent à notre modèle de données. Pour cela j'utilise la console, si vous êtes sur Symfony 4 cela correspond au "maker" que vous devrez ajouter à votre installation de base. Dans un premier temps, on va créer la base de données :

$ php bin/console doctrine:database:create

Puis on va créer nos entités, je commence par le client :

$ php bin/console doctrine:generate:entity

entity doctrine Une série de questions nous sont posées, comme on a déjà réfléchi à notre modèle de données, cela va être rapide d'y répondre.

Une fois que l'entité est créée, vous pouvez voir dans le dossier /src/AppBundle que deux répertoires ont été créés : Entity et Repository.

On fait la même chose avec l'entité produit, et l'entité commande. Pour le moment on ne s'occupe pas des relations entre nos entités.

On aurait pu coder tout cela à la main, mais autant utiliser la génération des entités que propose Symfony pour nous concentrer sur la logique de notre application.

On peut à présent indiquer à Doctrine qu'il faut enregistrer les entités dans notre base de données. Pour cela on utilise les commandes suivantes, la première nous permet d'afficher la requête SQL qui va être exécutée. $ php bin/console doctrine:schema:update --dump-sql Vous pouvez vérifier la requête, puis saisir la commande qui valide et va créer nos tables : $ php bin/console doctrine:schema:update --force Vous devez obtenir un message de succès, qui vous confirme que vos tables ont été créées.

arborescence symfony Vous devriez obtenir une arborescence comme présentée sur l'image dans votre répertoire qui contient le Bundle.

Si vous vous voulez vérifier ce qui s'est passé au niveau de la base de données, vous pouvez jeter un œil dessus, vous verrez que Doctrine a créé les tables, les champs, avec les indications que vous lui avez données. Il nous reste à présent à indiquer les relations entre nos tables, puis à coder les fonctions de l'application.