You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.5 KiB

TP2 - Routage, Services et Injections de Dépendances

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Permission is explicitly granted to copy, distribute and/or modify this document for educational purposes under the terms of the CC BY-NC-SA license.

Objectif

Les objectifs de ce TP sont :

  • De prendre en main les méthodes de routage de Symfony (GET/POST, avec et sans paramètres)
  • De prendre en main la création de services
  • De comprendre le fonctionnement de l'autowiring

Consignes

  • Durée : 2 heures
  • De préférence, ne placez PAS vos projets Symfony dans votre dossier ~/public_html (les quotas explosent !).
  • Nous allons utiliser la commande symfony server:start pour lancer notre serveur.
  • Nous allons créer un réseau social nommé TweetTok où les messages sont nommés des Twok.
  • Pour le moment, les Twoks seront stockés en dur dans un fichier JSON.

Ressources

[
  {
    "id": 42184,
    "author": "Yvan Durev",
    "content": "J'ai vu le plus beau coucher de soleil à la plage ! #béni #amoureuxducoucherdesoleil",
    "created_at": "2023-10-18T09:31:27"
  },
  {
    "id": 10727,
    "author": "Claire Voyance",
    "content": "Je n'arrive pas à croire que j'ai enfin terminé mon premier marathon ! #marathon #travaildur",
    "created_at": "2023-04-26T18:38:40"
  },
  {
    "id": 51869,
    "author": "Justin Ptipeu",
    "content": "Lire un bon livre, c'est comme entreprendre un voyage... #ratdebibliothèque #lecture",
    "created_at": "2023-11-11T18:22:50"
  },
  {
    "id": 29866,
    "author": "Jean Bonboeur",
    "content": "Rien ne vaut une bonne tasse de café par un jour de pluie. #café #jourdepluie",
    "created_at": "2023-05-18T19:14:26"
  },
  {
    "id": 38703,
    "author": "Alex Térieur",
    "content": "Je travaille sur ma nouvelle peinture, je me sens inspiré ! #art #créativité",
    "created_at": "2023-07-13T01:53:21"
  },
  {
    "id": 72106,
    "author": "Igor Gonzola",
    "content": "Explorer la ville et trouver des trésors cachés. #voyage #aventure",
    "created_at": "2023-01-31T12:24:30"
  },
  {
    "id": 80606,
    "author": "Agathe Afeeling",
    "content": "La soirée jeux en famille est toujours tellement amusante ! #tempsenfamille #jeuxdesociété",
    "created_at": "2023-09-22T13:27:22"
  },
  {
    "id": 54252,
    "author": "Samira Bien",
    "content": "J'ai cuisiné une nouvelle recette ce soir et c'était délicieux ! #cuisine #gourmand",
    "created_at": "2023-10-08T09:07:24"
  },
  {
    "id": 39343,
    "author": "Alfonse Danlta",
    "content": "La nouvelle saison de ma série préférée est sortie ! Temps de binge-watching. #sérieTV #bingewatching",
    "created_at": "2023-12-25T16:36:50"
  },
  {
    "id": 37497,
    "author": "Jean Peuplu",
    "content": "Je réfléchis aux petites joies de la vie. #gratitude #bonheur",
    "created_at": "2023-07-20T06:04:05"
  }
]

Partie 1 : Services et Injection de Dépendances (1 Heure)

  1. Créez un projet Symfony au format webapp et nommé TweetTok.

  2. Construction d'un Service pour Lire et Ecrire dans la base des Twoks :

    • Créer un service TwokManager avec une méthode getTwokByID et une méthode addTwok qui permettent de récupérer un Twok par son identifiant et d'ajouter un nouveau Twok au fichier JSON (attention à ne pas écraser les Twoks déjà dans le fichier!).
      // Rappels pour lire un fichier JSON en PHP
      $path = 'var/twoks_db.json';
      $jsonString = file_get_contents($path);
      $jsonData = json_decode($jsonString, true);
      var_dump($jsonData);
      
      // Rappels pour écrire un fichier JSON en PHP
      $path = 'new-file.json';
      $jsonString = json_encode($jsonData, JSON_PRETTY_PRINT);
      file_put_contents($path, $jsonString);
      
    • Créez une entité Twok qui contient uniquement les attributs d'un Twok (ID, auteur, message, date).
    • Faites en sorte que la méthode getTwokByID de la classe TwokManager retourne une instance de la classe Twok et que la méthode addTwok prenne une instance de Twok en paramètre :
      public function getTwokByID(int $id): Twok {}
      public function addTwok(Twok $twok): bool {}
      
    • Vérfiez que votre service TwokManager et votre classe Twok sont accessibles par autowiring.

Partie 2 : Création du Contrôleur et Routage (1 Heure)

  1. Création d'une Route de Base :

    • Créer un contrôleur nommé TweetTokController avec une méthode home et créer une route /home qui pointe dessus. La méthode home affichera un message de bienvenu.
  2. Mise en Œuvre du Routage Dynamique :

    • Dans le contrôleur TweetTokController, ajouter une méthode showTwok qui prend un ID en paramètre et affiche les détails du Twok pris dans le tableau fourni.
    • Créer une route /twok/{id}id est un paramètre dynamique représentant un ID de Twok qui pointe sur la méthode showTwok.
    • Ajouter une exigence pour que id soit un entier.
  3. Injection de Dépendances et Conversion des Paramètres :

    • Faites en sorte que la méthode showTwok du contrôleur TweetTokController fassent appel au service TwokManager.
    • Pour éviter d'avoir le nom du fichier JSON en dur dans le code, configurez son chemin comme argument dans le fichier config/services.yaml.
  4. Routage pour la méthode POST :

    • Ajoutez une méthode addTwok au contrôleur TweetTokController accessible via la route /twok en méthode POST uniquement (attention aux priorités avec la route de la méthode showTwok).
    • Implémentez le contenu de la méthode addTwok du contrôleur TweetTokController pour qu'elle ajoute le Twok au fichier JSON.

Pour aller plus loin :

  • Débogage de Routage : Utiliser la commande de console Symfony debug:router pour inspecter et déboguer les routes définies.
  • Inspection du Conteneur de Services : Explorer la commande debug:container pour comprendre comment les services sont configurés dans le conteneur.
  • Implémentez des jeux de test pour vos classes.