1 Création d’un projet symfony

Pour créer un projet qui utilise le framework Symfony, il suffit de la commande suivante :

Cette commande crée un répertoire my-project contenant l’arborescence d’une application web basée sur le framework Symfony. Il existe de nombreuses extensions disponibles que vous serez amené à utiliser dans les prochains travaux pratiques.

Dans ce premier TP, nous allons nous contenter de découvrir l’outil.

Créer un projet tp_hello qui utilise le framework Symfony.

2 Ajout d’un serveur web de développement

Le framework Symfony propose un interpréteur de commandes qui facilite le développement de l’application. Si vous êtes dans le répertoire de votre projet (cd tp_hello), il suffit de taper la commande :

Cette commande liste les commandes disponibles.

Il est possible d’ajouter des outils supplémentaires. Nous allons ajouter un serveur web de développement qui nous permettra de visualiser en direct les modifications faites pendant le développement.

Ajoute l’outil server, vous aurez noté l’utilisation de l’option --dev qui indique que l’outil sera utilisé uniquement dans la phase de développement.

Ajouter l’outil server.

Si vous tapez de nouveau la commande php bin/console list vous voyez apparaître de nouvelles commandes.

Taper la commande php bin/console server:start.

Vérifier dans votre navigateur que le serveur est opérationnel.

Taper la commande php bin/console server:stop pour arrêter le serveur.

3 Ajout d’une page à notre application

Pour le moment votre application ne dispose d’aucune page. Nous allons créer une première page en utilisant le modèle MVC.

Pour déclencher l’affichage de la page, il faut que le serveur reçoive une requête web qui sera envoyée vers le routeur qui dispachera celle-ci vers le bon contrôleur qui créera la réponse en utilisant le plus souvent une vue bâtie à partir d’un fichier template (twig.

Nous allons mettre en oeuvre ce modèle en utilisant les outils proposés par symfony.

3.1 Création d’un contrôleur

  1. Création d’un contrôleur Dans le répertoire src/Controller nous allons créer une classe HomeController dans un fichier HomeController.php. Voici le contenu de cette classe :

    Note : La classe se trouve dans le namespace App\Controller
    • On a créer une fonction hello
  2. Ajout de la route dans l’application

    Il nous faut associer une URL avec la fonction hello du contrôleur HomeController. Pour cela nous allons ajouter l’information dans le fichier routes.yaml dans le répertoire config.

    Note : Le fichier doit respecter la syntaxe yaml
    • On a créé une nouvelle route qui a pour nom hoem_hello
    • l’Url associée est /home/hello, et
    • l’action déclenchée est la fonction hello du contrôleur HomeController

Ajouter le contrôleur HomeController et créer la méthode hello.

Modifier le fichier routes.yaml dans le répertoire config.

Vérifier dans votre navigateur que l’url est opérationnelle.

Symfony propose un outil qui automatise la création d’un contrôleur, et autres entités que nous utiliserons par la suite. Pour rendre disponible cet outil, il faut l’installer à l’aide de les commandes

Si l’installation c’est bien déroulé, la commande suivante vous permet de créer un nouveau contrôleur directement :

Note : La commande

php bin/console make:controller --help

vous indique comment utiliser la commande.

La commande crée un fichier WelcomeController.php dans le répertoire src/Controller qui contient le code suivant :

Explications : Les annotations (commentaires PHP) sont créées automatiquement. Elles permettent d’associer l’url /welcome avec la méthode index du contrôleur WelcomeController sans avoir à ajouter la route dans le fichier routes.yaml dans le répertoire config.

Ajouter le contrôleur WelcomeController à l’aide de la commande make.

Vérifier dans votre navigateur que l’url est opérationnelle.

3.2 Ajout de la barre de debug

Il est possible d’ajouter un outil de bebug en utilisant la commande

3.3 Ajouter une vue avec le moteur de templates twig.

Pour utiliser le moteur de templates twig dans le contrôleur HomeController, il faut modifier le contrôleur et indiquer que le contrôleur hérite de la classe AbstractController. En concéquence, le contrôleur disposera de la méthode render qui permet d’utiliser en paramètre un template.

Le contrôleur HomeController utilise le fichier hello.html.twig qui contient le template.

Il est possible d’échanger entre le contrôleur et la vue. Pour cela on ajoute un tableau associatif comme deuxième paramètre de la méthode render.

On modifie la vue et on inclut un paramètre

Vous pouvez utiliser la vue base.html.twig qui est proposer par Symfony comme base.

Modifier le contrôleur WelcomeController pour qu’il utilise une vue twig.

Modifier à nouveau le contrôleur WelcomeController pour qu’il fournisse un paramètre dans la vue twig.

4 Sauvegarde du projet

Nous allons atteint une première étape qui consistait à mettre en place un contrôleur qui utilise une vue avec paramètres au format twig.

Nous allons sauvegarder cette étape dans le gestionnaire de version de projet de l’Université : la forge.

  1. Il faut créer un nouveau projet sur la forge. Pour cela vous devez vous connecter sur la forge et ajouter un projet. Dès que vous avez créé le projet, vous devez récupérer le lien qui vous permet d’y accéder.

  2. Dans votre projet vous devez initialiser le gestionnaire de versions

    Pour simplifier les opérations avec le gestionnaire de version, il est important de disposer d’un fichier .getignore (Symfony vous en propose un par défaut).

  3. Ajouter les fichiers de votre projet (sauf ceux indiqués dans le fichier .getignore) dans la gestion de versions.

  4. Si vous souhaitez sauvegarder votre projet sur la forge pour pouvoir le partager avec d’autres personnes, vous devez l’exporter (push) vers la forge.

  5. Création d’une nouvelle branche pour étendre notre travail

Placez votre projet sous git et ajoutez ce projet sur la forge de l’Université.

5 Utilisation d’un modèle d’information

Dans cette section nous allons mettre en oeuvre la gestion de données stockées dans une base de données.

5.1 Ajout de l’outil doctrine

Pour ajouter la librairie doctrine dans votre projet vous devez taper les commandes suivantes :

Cette commande ajoute de nombreuses posibilités à la console, utilisez la commande suivante pour lister les nouvelles actions possibles :

Le fichier .env permet d’indiquer la localisation de la base de données qui sera utilisée par l’application web. La ligne suivante du fichier doit être adaptée pour utiliser votre base de données :

DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name

nous allons utiliser un générateur de données aléatoires, pour l’ajouter à votre projet vous devez utiliser la commande suivante :

5.1.1 Modèle d’information

Nous allons mettre en oeuvre le modèle d’information suivant :

L’entité Salle modélise une salle de formation et l’entité Materiel modélise le contenu que l’on peut trouver dans une salle de formation.

5.1.2 Pour créer les entités

Symfony propose une commande qui permet de créer une entity de manière intéractive.

Voici le résultat obtenu pour l’entité Salle et l’entité Materiel

Il faut ajouter l’association :

Créez les entités Salle et Materiel dans votre projet.

Créez les tables correspondendent dans une base de données.

Pour créer les tables dans la base de données on pourra utiliser la commande

Cette commande crée un script dans le répertoire src/Migrations qui contient les instructions sql pour créer les tables. Il suffit ensuite d’exécuter le script à l’aide de la commande suivante :

Créez des données aléatoires dans les tables.

Pour créer des données aléatoires, on utilisera la librairie fzaninotto/faker. Il faut créer une classe InventaireFixtures dans un fichier InventaireFixtures.php dans le répertoire src/DataFixtures avec par exemple le contenu suivant :

La fonction execute de la classe Populator va associer par défaut le matériel avec la salle qui a été créée. La commande suivante permet de déclencher le chargement des données :

5.2 Mise en oeuvre d’une application CRUD

Pour créer un contrôleur qui gère une entité, nous allons utiliser une commande qui est proposée par symfony

Si vous exécutez cette commande, elle génère une erreur.

                                                                                                                        
 [ERROR] Missing packages: to use the make:crud command, run:                                                           
                                                                                                                        
         composer require form validator security-csrf                                                                  
                                                                                                                        

Qui nous demande d’installer une nouvelle librairie.

Après installation de la librairie et exécution de la commande, un fichier SalleController.php a été créé dans le répertoire src/Controller. De plus si on visualise le contenu du fichier, on remarque que dans les annotations, les toutes ont été ajoutées automatiquement.

Note : La liste des routes disponibles dans votre application peut être visualisée dans la console à l’aide de la commande :

Dans le répertoire templates, un répertoire salle a été créé. Il contient l’ensemble des vues qui vont permettre de manipuler l’entité Salle. Ce travail de départ demande généralement à être modifié pour vos besoins personnels.

Tester l’application CRUD pour l’entité Salle.

5.2.1 Adaptation de l’application CRUD

Pour notre application, nous aurons besoin de :

  • Lister les salles
  • Afficher une salle avec la liste des équipements (materiels) qu’elle contient
  • Modifier une salle, c’est à dire son nom et son bâtiment, mais aussi pouvoir ajouter et/ou supprimer des équipements.
  • Supprimer une salle et l’ensemble des équipements qu’elle contient.

Modifier l’application CRUD pour assurer les besoins énoncés précédemment.

5.2.2 Traitement des erreurs

Avec Symfony, une erreur de traitement est transformée en exception, il est possible de modifier le comportement de l’application lors de de la levée d’une exception en modifiant le contenu et le style de la page produite en réponse à la requête (d’autres modifications plus fines peuvent être utilisées).

Dans ce TP nous allons nous contenter d’une modification de contenu et de style des pages “erreur”.

  1. Création d’un répertoire templates/bundles/TwigBundle/Exception/. Dans le répertoire nous allons placer les pages d’erreurs qui nous conviennent.
    • error404.html.twig pour les erreurs de type 404
    • error500.html.twig pour les erreurs de type 500
    • etc…
    • error.html.twig pour les erreurs dont on a pas trouver la page dans le répertoire.
  2. Pour pouvoir tester ces pages d’erreurs en phase de développement, il faudra utiliser une url de la forme :

    Par exemple pour tester une erreur de type 404, on utilisera l’url :

Modifiez les pages erreurs de l’application.

Enregistrez les modifications sur la forge de l’université.

 

IUT de Lens Département Informatique

2018