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.

164 lines
5.8 KiB

# TPn - Installation et découverte de `Symfony`
## Objectif
Les objectifs de ce TP sont :
- D'apprendre à installer `Composer` et `Symfony` ;
- A configurer un projet `Symfony` ;
- A utiliser `Composer` pour la gestion des dépendances ;
- A explorer les commandes de la console `Symfony` pour le débogage ;
- Réaliser une première application minimaliste en `Symfony`
- Et la tester avec PHPUnit.
## Consignes
- Durée : 2 heures
- Tous vos projets `Symfony` sont à placer votre dossier `~/public_html`.
- Utilisez le serveur `londres.uca.local` pour tester vos pages et non la
commande `symfony server:start`.
## Installation de Composer et `Symfony`
- Assurez vous que `~/.local/bin` est dans votre variable d'environnement
`$PATH`.
- Installation de `Composer` :
```sh
# Télécharger Composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# Vérifier l'installateur
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installateur vérifié'; } else { echo 'Installateur corrompu'; unlink('composer-setup.php'); } echo PHP_EOL;"
# Installer Composer
php composer-setup.php
# Supprimer l'installateur
php -r "unlink('composer-setup.php');"
# Déplacer Composer dans votre $PATH
mv composer.phar ~/.local/bin/composer
```
- Installation de `Symfony` :
```sh
# Télécharger et installer `Symfony`
curl -sS https://get.symfony.com/cli/installer | bash
# Déplacer `Symfony` dans votre $PATH
mv ~/.symfony5/bin/symfony ~/.local/bin/symfony
# Vérifiez que votre PC a les dépendances requises par `Symfony`
symfony check:requirements
```
## Création de votre premier projet `Symfony`
- Placez vous dans le dossier `~/public_html` et créez votre premier projet
`Symfony`:
```sh
symfony new --webapp tp1
```
1. Rendez-vous sur la page
`http://londres.uca.local/~VOTRE_USERNAME/tp1/public/index.php`. Que
constatez-vous ?
- 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
{
return dirname(__DIR__).'/../cache/log';
}
```
3. Rendez-vous sur la page
`http://londres.uca.local/~VOTRE_USERNAME/tp1/public/index.php`. Que
constatez-vous ?
## Découverte de la console `Symfony`
- Entrez la commande `symfony console` et parcourez les commandes possibles
(elles vont servir pour la suite du TP!).
4. 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` ?
- L'utilitaire `~/.local/bin/symfony` est un wrapper vers les commandes
`composer`, `php`, et la console `Symfony` de votre projet qui se trouve
`tp1/bin/console`. Aussi, avec le même `~/.local/bin/symfony`, la console
`Symfony` sera celle de votre projet et montrer la version choisie.
## Création de votre premier controlleur
6. Utilisez la console `Symfony` pour créer un controlleur que vous appellerez
`QuoteController`. Quels sont les fichiers crées par `Symfony` ? Observez
leur contenu.
7. 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
console `Symfony` (voir `symfony console debug -h` si besoin). Quelle
commande avez-vous utilisé ?
8. Modifiez le controlleur existant pour qu'il fasse un appel à l'une des API externes
suivantes avec une requête GET:
- https://type.fit/api/quotes
- https://api.quotable.io/random
- **<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.**
9. 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:
```twig
<p>
&ldquo;{{ quote }}&rdquo;
<br />
Author: {{ author | capitalize }}
</p>
```
## Testez votre code
10. Utilisez la console `Symfony` pour créer un test de type `WebTestCase` que
vous appellerez `QuoteControllerTest`. Quels sont les fichiers crées par
`Symfony` ? Oberservez leur contenu.
11. 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
implémenté.
12. 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
mêmes). Pour améliorer votre test, utilisez un
[mock-client](https://docs.php-http.org/en/latest/clients/mock-client.html)
(la classe `WebTestCase` de `Symfony` étend la classe
`PHPUnit_Framework_TestCase`).
## Pour aller plus loin
- Générez une exception dans votre code (accès à une variable indéfinie,
division par zéro, etc) et explorez la console de debug en cliquant en bas à
gauche sur l'erreur.
- Étudiez la partie "HTTP Client" de la documentation `Symfony` pour améliorer
votre code.