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.1 KiB

TP2 - Routage, Services et Injections de Dépendances

Objectif

Les objectifs de ce TP sont :

  • De prendre en main les méthodes de routage de Symfony (GET/PUT, 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
  • Tous vos projets Symfony sont à placer votre dossier ~/public_html.
  • Utilisez le serveur londres.iut.local pour tester vos pages et non la commande symfony server:start.

Ressources

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

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

  1. Construction d'un Service pour Lire et Ecrire dans la base des Twoks :
    • Créer une classe TwokManager avec une méthode getTwokByID et un méthode ``addTwokqui permettent de récupérer unTwokpar son identifiant et d'ajouter un nouveauTwokau fichier JSON (attention à ne pas écraser lesTwoks` 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 classe 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 PUT :

    • Ajoutez une méthode addTwok au contrôleur TweetTokController accessible via la route /twok en méthode PUT 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.