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.
165 lines
6.5 KiB
165 lines
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](https://creativecommons.org/licenses/by-nc-sa/4.0/).
|
|
> 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
|
|
|
|
- Documentation de Symfony sur les services :
|
|
[https://symfony.com/doc/5.x/service_container.html](https://symfony.com/doc/5.x/service_container.html)
|
|
- Documentation de Symfony sur les routes : [https://symfony.com/doc/5.x/routing.html](https://symfony.com/doc/5.x/routing.html)
|
|
|
|
```json
|
|
[
|
|
{
|
|
"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!).
|
|
```php
|
|
// 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 :
|
|
```php
|
|
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}` où `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.
|