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
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 desTwok
. - Pour le moment, les
Twoks
seront stockés en dur dans un fichier JSON.
Ressources
- Documentation de Symfony sur les services : https://symfony.com/doc/5.x/service_container.html
- Documentation de Symfony sur les routes : https://symfony.com/doc/5.x/routing.html
[
{
"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)
-
Créez un projet Symfony au format
webapp
et nomméTweetTok
. -
Construction d'un Service pour Lire et Ecrire dans la base des
Twoks
:- Créer un service
TwokManager
avec une méthodegetTwokByID
et une méthodeaddTwok
qui permettent de récupérer unTwok
par son identifiant et d'ajouter un nouveauTwok
au 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 entité
Twok
qui contient uniquement les attributs d'unTwok
(ID, auteur, message, date). - Faites en sorte que la méthode
getTwokByID
de la classeTwokManager
retourne une instance de la classeTwok
et que la méthodeaddTwok
prenne une instance deTwok
en paramètre :public function getTwokByID(int $id): Twok {} public function addTwok(Twok $twok): bool {}
- Vérfiez que votre service
TwokManager
et votre classeTwok
sont accessibles par autowiring.
- Créer un service
Partie 2 : Création du Contrôleur et Routage (1 Heure)
-
Création d'une Route de Base :
- Créer un contrôleur nommé
TweetTokController
avec une méthodehome
et créer une route/home
qui pointe dessus. La méthodehome
affichera un message de bienvenu.
- Créer un contrôleur nommé
-
Mise en Œuvre du Routage Dynamique :
- Dans le contrôleur
TweetTokController
, ajouter une méthodeshowTwok
qui prend un ID en paramètre et affiche les détails duTwok
pris dans le tableau fourni. - Créer une route
/twok/{id}
oùid
est un paramètre dynamique représentant un ID deTwok
qui pointe sur la méthodeshowTwok
. - Ajouter une exigence pour que
id
soit un entier.
- Dans le contrôleur
-
Injection de Dépendances et Conversion des Paramètres :
- Faites en sorte que la méthode
showTwok
du contrôleurTweetTokController
fassent appel au serviceTwokManager
. - 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
.
- Faites en sorte que la méthode
-
Routage pour la méthode POST :
- Ajoutez une méthode
addTwok
au contrôleurTweetTokController
accessible via la route/twok
en méthode POST uniquement (attention aux priorités avec la route de la méthodeshowTwok
). - Implémentez le contenu de la méthode
addTwok
du contrôleurTweetTokController
pour qu'elle ajoute leTwok
au fichier JSON.
- Ajoutez une méthode
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.