# 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 - **Attention! 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

“{{ quote }}”
Author: {{ author | capitalize }}

``` ## 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.