Installer Symfony et son environnement de travail
Avant de pouvoir travailler concrètement sur Symfony, il faut mettre en place notre environnement de travail.
Pour cela, nous allons installer :
- Composer, gestionnaire de paquet pour PHP (ou lien direct vers l'installeur)
- Installer Scoop
- Ouvrir Powershell et lancer les commandes
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
- l'outil en ligne de commande de Symfony (ou lien direct vers l'installeur) ou avec Scoop :
scoop install symfony-cli
Si vous utilisez Windows, je vous conseille d'utiliser Powershell pour éviter des erreurs de rendu.
Pour créer un projet Symfony, nous pouvons maintenant utiliser notre ligne de commande (PowerShell dans mon cas) :
symfony new --webapp my_project --php=8.1
Vous pouvez alors ouvrir ce nouveau dossier avec votre IDE favori. Les deux sous-parties suivantes sont consacrées à la gestion d'un projet Symfony dans notre IDE. Pour la base de données, nous aurons besoin de Wamp/Mamp.
Plugins utiles pour nos IDE
PHPStorm
Pour installer un plugin dans PHPStorm, aller dans les options, partie plugins
(File
> Settings
> Plugins
) et chercher dans la partie Marketplace
- Symfony Support
- .env files support
- OpenAPI (Swagger) Editor
Voir également la vidéo dédiée à la configuration de PHPStorm
VS Code
Pour installer un plugin dans VSCode, aller dans le menu de gauche, partie Extensions (avec 4 petits carrés). Pour chacun de ces plugins, je vous conseille d'en regarder la doc et de suivre son processus d'installation.
- DotENV pour mettre de la couleur dans les fichiers d'environnement (
.env
) - MySQL (de Weijan Chen) pour faire le lien avec votre base de données (je vous ai fait une vidéo d'installation et de configuration)
- PHP (de DevSense)
- Symfony for VSCode (de TheNouillet)
- Twig Language 2 (de mblode)
- Git History (de Don Jayamanne)
Requis techniques
Avant de commencer à créer un site avec Symfony, certaines notions sont nécessaires :
- Une bonne maîtrise du PHP orienté objet (y compris les espaces de nom)
- Le principe MVC pour organiser nos fichiers
- Les annotations et attributs en PHP (voir point suivant)
Annotations et attributs
Je vous invite à lire le très bon article de Maxime Colin, de la société Elao sur les attributs
Dans plusieurs langages, et particulièrement en PHP avec Symfony, nous avons besoin de fournir des informations supplémentaires sur des symboles (classes, interfaces, traits, etc.), propriétés ou méthodes. Cela permet notamment de générer une documentation, d'améliorer la complétion des IDE (comme PHP Storm ou VsCode), mais aussi définir le fonctionnement de certaines librairies ! Nous pouvons le faire via des commentaires ou des attributs, 2 éléments du langage PHP que nous allons détailler un peu plus ici.
C'est le cas en Symfony, notamment pour la définition des routes ou la définition des entités.
Les annotations sont des commentaires spéciaux (au format PHPDoc). Dans l'exemple suivant, on appelle une classe Route avec les paramètres de son constructeur, que l'on peut nommer (pour les utiliser dans le désordre). L'inconvénient est le besoin d'un parser (librairie qui va lire nos fichiers PHP pour chercher les annotations) qui, bien que fourni avec Symfony, rajoute un travail supplémentaire dans l'interprétation de notre code.
Un exemple d'annotation :
/**
* @Route('/', name="default_index")
*/
Un attribut est une expression du langage PHP, qui ne nécessite donc pas l'appel à un parser et qui permet le même fonctionnement.
Le même exemple, en attribut :
#[Route('/', name: "default_index")]
Outils de qualité de code
Php CS Fixer
Symfony suit les conventions d'écriture PSR, mais il n'est pas toujours aisé de les appliquer au quotidien. Heureusement, des outils comme Php CS Fixer ont été créé pour nous aider dans cette tâche. Vous pouvez l'ajouter en dépendance de développement de votre projet avec la commande :
composer require --dev friendsofphp/php-cs-fixer
Vous pourrez ensuite le lancer avec vendor/bin/php-cs-fixer fix
pour mettre à jour votre code, pour respecter les standards de code de Symfony.
Vous pouvez également trouver la configuration par défaut dans le fichier .php-cs-fixer.dist.php
qui a été créé. Si vous souhaitez la modifier, vous pouvez le faire dans ce fichier, ou dans un fichier .php-cs-fixer.php
à la racine de votre projet (il ne sera pas versionné).
PHPStan
PHPStan est un analyseur statique de code. Son but est de détecter autant d'erreurs que possible, simplement en relisant votre code, vérifiant la cohérence des types (de vos variables, paramètres, retours, etc.), des appels, des classes, etc.
Il aide également à écrire un code solide et compréhensible pour les autres développeurs, en renforçant les typages et d'autres bonnes pratiques.
PHPStan fournit 10 niveaux de tests (de 0 à 9), plus ou moins exigeants et nécessitant plus ou moins de modifications dans votre code, pour le rendre meilleur. Je recommande un niveau de 5, au minimum, sur les projets Symfony.
Pour l'installer sur un projet Symfony :
composer require --dev phpstan/extension-installer phpstan/phpstan-symfony phpstan/phpstan-doctrine phpstan/phpstan-strict-rules
Je vous conseille de créer un fichier phpstan.neon
à la racine de votre projet, pour configurer l'exécution de PHPStan et le lancer plus simplement :
parameters:
level: 9
paths:
- src
Bien sûr, si vous ne voulez pas affronter le niveau 9 directement, remplacez par le niveau souhaité (il est utile de corriger les problèmes en augmentant le niveau progressivement).
Pour lancer PHPStan : vendor/bin/phpstan analyse
Lancer nos outils avec Composer
Pour éviter de retenir des chemins complexes, nous pouvons préciser des scripts dans notre composer.json
(⚠️ ne remplacez pas les scripts existants, ajoutez seulement les vôtres) :
{
"scripts": {
"fix": "php-cs-fixer fix",
"analyse": "phpstan analyse"
}
}
Ajouter les 2 lignes fix
et analyse
dans vos scripts, permet de définir des raccourcis pour lancer Php CS Fixer et PHPStan, sans avoir à se rappeler le détail des commandes 😉 .
Ces commandes peuvent être lancées avec composer fix
et composer analyse
Exercices
Nous allons pratiquer à l'aide d'un petit projet : un blog. Nous allons le construire étape par étape, à chaque section du cours.
Dans un premier temps, il nous faut :
- initialiser un nouveau projet Symfony
- ajouter
php-cs-fixer
etphpstan
dans les dépendances de dev du projet- Les configurer
- les ajouter aux scripts de composer