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.

5.9 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 :
# 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') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { 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 :
# 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:
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.
  1. 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 :

public function getCacheDir(): string
{
    return dirname(__DIR__).'/../cache/cache';
}

public function getLogDir(): string
{
    return dirname(__DIR__).'/../cache/log';
}
  1. 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!).
  1. 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!

  2. 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

  1. Utilisez la console Symfony pour créer un controlleur que vous appellerez QuoteController. Quels sont les fichiers crées par Symfony ? Oberservez leur contenu.

  2. Quelle route mène à ce controlleur ? Trouvez la réponse dans le fichier du constrolleur, 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é ?

  3. Modifiez le controlleur existant pour qu'il fasse un appel à l'une des API externes suivantes avec une requête GET:

  • 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.
  1. Mofidiez 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:
<p>
&ldquo;{{ quote }}&rdquo;
<br />
Author: {{ author | capitalize }}
</p>

Testez votre code

  1. 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.

  2. 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é.

  3. 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 (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.