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
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>
|
|
“{{ quote }}”
|
|
<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.
|