Updated: 2025

public
Maxime Puys 5 months ago
parent cf5d447829
commit b4d850dd10

@ -14,14 +14,13 @@ Les objectifs de ce TP sont :
## Consignes ## Consignes
- Durée : 2 heures - Durée : 2 heures
- Tous vos projets `Symfony` sont à placer votre dossier `~/public_html`. - De préférence, ne placez **PAS** vos projets `Symfony` dans votre dossier `~/public_html` (les quotas explosent !).
- Utilisez le serveur `londres.uca.local` pour tester vos pages et non la - Nous allons utiliser la commande `symfony server:start` pour lancer notre serveur.
commande `symfony server:start`.
## Installation de Composer et `Symfony` ## Installation de Composer et `Symfony`
- Assurez vous que `~/.local/bin` est dans votre variable d'environnement - Assurez vous que `~/.local/bin` est dans votre variable d'environnement
`$PATH`. `$PATH`.
- Installation de `Composer` : - Installation de `Composer` :
```sh ```sh
@ -33,11 +32,13 @@ php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b3
php composer-setup.php php composer-setup.php
# Supprimer l'installateur # Supprimer l'installateur
php -r "unlink('composer-setup.php');" php -r "unlink('composer-setup.php');"
# Va créer le dossier si n'existe pas
mkdir -p ~/.local/bin
# Déplacer Composer dans votre $PATH # Déplacer Composer dans votre $PATH
mv composer.phar ~/.local/bin/composer mv composer.phar ~/.local/bin/composer
``` ```
- Installation de `Symfony` : - Installation du binaire de gestion `Symfony` :
```sh ```sh
# Télécharger et installer `Symfony` # Télécharger et installer `Symfony`
@ -50,57 +51,32 @@ symfony check:requirements
## Création de votre premier projet `Symfony` ## Création de votre premier projet `Symfony`
- Placez vous dans le dossier `~/public_html` et créez votre premier projet - Placez vous dans votre home et créez votre premier projet
`Symfony`: `Symfony`:
```sh ```sh
symfony new --webapp tp1 symfony new --webapp tp1
``` ```
1. Rendez-vous sur la page - Entrez dans votre projet :
`http://londres.uca.local/~VOTRE_USERNAME/tp1/public/index.php`. Que ```sh
constatez-vous ? cd tp1
```
- L'utilisateur UNIX `www-data` qui fait tourner le serveur Apache sur le
server Londres n'a pas le droits d'écriture dans votre dossier
`~/public_html` par sécurité. Or, `Symfony` a besoin d'écrire des fichiers
pour les cache et les logs. Un dossier spécial a été mis en place pour ces
besoins : `~/public_html/cache`.
2. Vérifiez que l'utilisateur `www-data` a les droits de lecture, écriture et
exécution sur ce dossier.
- Nous devons donc configurer `Symfony` pour qu'il utilise ce dossier pour ses
cache et logs.
- Rendez-vous dans `~/public_html/tp1` et ouvrez le fichier `src/Kernel.php`.
Ajouter les deux méthodes suivantes à la classe Kernel :
```php
public function getCacheDir(): string
{
return dirname(__DIR__).'/../cache/cache';
}
public function getLogDir(): string - Lancez le serveur de développement de `Symfony` :
{ ```
return dirname(__DIR__).'/../cache/log'; symfony server:start
}
``` ```
3. Rendez-vous sur la page 1. Rendez-vous sur la page `http://127.0.0.1:8000`. Que constatez-vous ?
`http://londres.uca.local/~VOTRE_USERNAME/tp1/public/index.php`. Que
constatez-vous ?
## Découverte de la console `Symfony` ## Découverte de la console `Symfony`
- Entrez la commande `symfony console` et parcourez les commandes possibles - Entrez la commande `symfony console` et parcourez les commandes possibles
(elles vont servir pour la suite du TP!). (elles vont servir pour la suite du TP!).
4. Quelle version de `Symfony` tourne à l'IUT ? Quelle version de PHP ? 2. Quelle version de `Symfony` tourne à l'IUT ? Quelle version de PHP ?
Attention! Si le serveur Londres a plusieurs installations de PHP en
parallèle, vérifiez bien celle qui fait tourner votre serveur `Symfony`!
5. Comment créer un projet avec une version spécifique de `Symfony` ? 3. Comment créer un projet avec une version spécifique de `Symfony` ?
- L'utilitaire `~/.local/bin/symfony` est un wrapper vers les commandes - L'utilitaire `~/.local/bin/symfony` est un wrapper vers les commandes
`composer`, `php`, et la console `Symfony` de votre projet qui se trouve `composer`, `php`, et la console `Symfony` de votre projet qui se trouve
@ -109,45 +85,79 @@ public function getLogDir(): string
## Création de votre premier controlleur ## Création de votre premier controlleur
6. Utilisez la console `Symfony` pour créer un controlleur que vous appellerez 4. Utilisez la console `Symfony` pour créer un controlleur que vous appellerez
`QuoteController`. Quels sont les fichiers crées par `Symfony` ? Observez `BitcoinController`. Quels sont les fichiers crées par `Symfony` ? Observez
leur contenu. leur contenu.
7. Quelle route mène à ce controlleur ? Trouvez la réponse dans le fichier du 5. Quelle route mène à ce controlleur ? Trouvez la réponse dans le fichier du
controlleur, puis validez avec la commande de debug des routes dans le controlleur, puis validez avec la commande de debug des routes dans le
console `Symfony` (voir `symfony console debug -h` si besoin). Quelle console `Symfony` (voir `symfony console debug -h` si besoin). Quelle
commande avez-vous utilisé ? commande avez-vous utilisé ?
8. Modifiez le controlleur existant pour qu'il fasse un appel à l'une des API externes 6. Nous allons récupérer des informations provenant d'une API externe donne le
suivantes avec une requête GET: cours du bitcoin et l'afficher. Modifiez le controlleur existant pour
- https://type.fit/api/quotes qu'il fasse un appel à l'une des API externes suivantes avec une requête GET.
- https://api.quotable.io/random Pour cela, utilisez le module
[`http_client`](https://symfony.com/doc/current/http_client.html) de `Symfony`:
- https://api.coincap.io/v2/assets/bitcoin
- https://api.coingecko.com/api/v3/coins/bitcoin
- https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/btc.json
- **<span style="color:red">Attention!</span> Toute la salle de TP partage la même IP donc pour éviter les - **<span style="color:red">Attention!</span> Toute la salle de TP partage la même IP donc pour éviter les
quotas sur l'API, merci de rester raisonables sur les requêtes faites.** quotas sur l'API, merci de rester raisonables sur les requêtes faites.**
9. Modifiez ensuite le template `Twig` crée par la console `Symfony` pour qu'il - En dernier recours : https://sancy.iut.uca.fr/~puys/btc.json
7. Modifiez ensuite le template `Twig` crée par la console `Symfony` pour qu'il
prenne en entrée une citation et son auteur et les affiche: prenne en entrée une citation et son auteur et les affiche:
```twig ```twig
<p> <p>
&ldquo;{{ quote }}&rdquo; Date: {{ "now"|date("Y-m-d H:i:s") }}
<br /> <br />
Author: {{ author | capitalize }} {{ symbol }} : {{ value }}
</p> </p>
``` ```
## Création d'une commande
8. Nous allons maintenant créer une commande dans le dossier `src/Command`. Ce repértoire contiendra
toutes les commandes de votre projet. Cette commande va récupérer également la valeur
du prix du bitcoin dans la console en utilisant les API externes précédentes. Générez le code de
la commande à l'aide de la console `Symfony` et nommez la commande
`CryptoValueCommand`. Quelle commande `Symfony` avez-vous utilisé pour créer le
code ?
9. Maintenant, vous voulez que votre commande appelle l'API pour la
cryptomonaie qui aura été passé en argument de la commande (ex: BTC, ETH,
SOL, etc). Adaptez le code de votre commande pour faire un appel API précédente
avec l'identifiant de la cryptomonnaie passée en argument de commande.
10. Que se passe-t-il si vous entrez autre chose en argument qu'un identifiant
valide (exemple: votre prénom, un nombre, etc) ?
11. Adaptez votre code maintenant pour que l'identifiant de la cryptomonnaie à
afficher ne soit plus passé en argument, mais soit demandé interactivement
dans la console. Gérer le fait que si aucun identifiant n'a été saisi la
commande se met en erreur et retourne un message en conséquence. (soit la
commande se termine, soit cela redemande un identifiant tant qu'il n'en a pas saisi un valide)
Les commandes sont un autre point d'entrée de votre projet Symfony. Elles
peuvent être utilisés pour faire des traitements assez conséquent et notamment
les utiliser à travers un cron. (Exemple de cas concret: chaque heure, il faut synchroniser le
cours des devises et enregistrer en base les nouvelles données)
## Testez votre code ## Testez votre code
10. Utilisez la console `Symfony` pour créer un test de type `WebTestCase` que 12. Utilisez la console `Symfony` pour créer un test de type `WebTestCase` que
vous appellerez `QuoteControllerTest`. Quels sont les fichiers crées par vous appellerez `CryptoControllerTest`. Quels sont les fichiers crées par
`Symfony` ? Oberservez leur contenu. `Symfony` ? Oberservez leur contenu.
11. Modifiez le test crée pour qu'il appelle la route vers votre contrôleur et 13. Modifiez le test crée pour qu'il appelle la route vers votre contrôleur et
valide le code de retour et le contenu de la vue `Twig` que vous avez valide le code de retour et le contenu de la vue `Twig` que vous avez
implémenté. implémenté.
12. Vous remarquerez qu'il est compliqué de valider votre code alors qu'il 14. Vous remarquerez qu'il est compliqué de valider votre code alors qu'il
affiche une citation aléatoire (les valeurs à tester le sont jamais les affiche une citation aléatoire (les valeurs à tester le sont jamais les
mêmes). Pour améliorer votre test, utilisez un mêmes). Pour améliorer votre test, utilisez un
[mock-client](https://docs.php-http.org/en/latest/clients/mock-client.html) [mock-client](https://docs.php-http.org/en/latest/clients/mock-client.html)
@ -161,3 +171,5 @@ Author: {{ author | capitalize }}
gauche sur l'erreur. gauche sur l'erreur.
- Étudiez la partie "HTTP Client" de la documentation `Symfony` pour améliorer - Étudiez la partie "HTTP Client" de la documentation `Symfony` pour améliorer
votre code. votre code.
- Donnez du style à vos commandes Symfony ! Utilisez les Helpers de la Console
Symfony pour avoir un rendu plus sympa. Par exemple une ProgressBar indiquant la progression de votre commande. Et une Table du Symfony Helper permettant de lister le top 5 crypto du moment dans un tableau visuellement agréable dans la console. (Rank, name, symbol, priceUsd, supply)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save