Arborescence du Projet
Une application Symfony est organisée en plusieurs répertoires, chacun ayant un rôle précis :
- assets :
Contient les ressources publiques de l’application (CSS, JavaScript). - bin :
Contient les exécutables du projet ou des dépendances, y compris la console Symfony. - config :
Regroupe les fichiers de configuration de l’application. - migrations :
Contient les scripts PHP pour mettre à jour le schéma de la base de données, générés par les outils Symfony. - public :
Dossier contenant le contrôleur frontal (index.php). - src :
Cœur du projet, contient les classes métier, contrôleurs, etc. C’est ici que la majorité du développement est effectuée. - templates :
Stocke les templates et gabarits Twig, mélangeant HTML et Twig pour le rendu dynamique des écrans. - tests :
Regroupe les tests logiciels (unitaires, fonctionnels, etc.) exécutés via PHPUnit. - translations :
Contient les fichiers de langue pour l’internationalisation de l’application. - var :
Contient le cache et les logs (historique des événements). - vendor :
Géré par Composer, contient les paquets nécessaires au projet. Ne doit pas être versionné.
Règles et Conventions d’Organisation du Projet
Le Standard PSR-4
PSR-4 est une norme pour le chargement automatique des classes PHP. Elle définit une corrélation entre le nom complet d’une classe (FQCN) et son emplacement dans le système de fichiers.
- Exemple :
Une classeMONPROJET\MonEspace\MaClasse
doit être placée dans le fichier suivant :
src/MONPROJET/MonEspace/MaClasse.php
. - Contenu typique :
- Règles importantes :
- Ne pas utiliser de tirets bas
_
dans les noms de classe. - Respecter l’organisation définie par PSR-4.
- Ne pas utiliser de tirets bas
Conventions de Nommage
- Camel Case (majuscule pour chaque mot) :
- Classes :
IdentificationUtilisateurService
- Méthodes :
maMethodeDeService()
- Attributs :
monAttribut
- Constantes :
NOMBRE_DE_ROUES
- Classes :
- Snake Case (minuscule avec underscores
_
) :
Utilisé pour :- Variables Twig :
http_status_code
- Paramètres de configuration :
framework.csrf_protection
- Variables Twig :
- Autres conventions :
- Interfaces : suffixées par
Interface
(ex. :UserInterface
). - Traits : suffixés par
Trait
(ex. :AuthMethodsTrait
). - Classes abstraites : préfixées par
Abstract
(ex. :AbstractUserService
). - Exceptions : suffixées par
Exception
(ex. :UserLoginErrorException
).
- Interfaces : suffixées par
- Noms de fichiers :
Suivre la convention des classes pour les fichiers PHP.
Exemple :IdentificationUtilisateurService.php
.
Pour les templates Twig et fichiers statiques (CSS, JS) : utiliser Snake Case.
Exemple :article.html.twig
,main.css
.
La Configuration d’une Application Symfony
Symfony supporte différents formats pour la configuration : annotations, YAML, XML, PHP, et attributs PHP 8.
a. Les Annotations
Les annotations sont des métadonnées ajoutées dans des DocBlocks (/** */
).
- Exemple :
b. Le Format YAML
Langage simple et lisible utilisé pour la configuration, très courant dans Symfony.
- Exemple :
ma_route: path: /hello/world controller: App\Controller\WelcomeController::hello
c. Le Format XML
Bien structuré mais verbeux.
- Exemple :
<route id="ma_route" path="/hello/world" controller="App\Controller\WelcomeController::hello" />
d. Le Format PHP
Directement écrit en PHP, offre de légers gains de performance mais moins lisible.
- Exemple :
return function (RoutingConfigurator $routes) { $routes->add('ma_route', '/hello/world') ->controller([WelcomeController::class, 'hello']); };
e. Les Attributs PHP 8
Similaires aux annotations, mais natifs à PHP 8.
- Exemple :
f. Choix du Format
- Annotations : rapides et maintenables, mais non natives.
- Attributs : natifs avec PHP 8, recommandés pour les nouveaux projets.
- YAML : flexible et lisible.
- XML : strict, mais verbeux.
- PHP : performant, mais rarement utilisé.
Pour la cohérence, choisissez un format unique dans votre projet.
Ressources Supplémentaires
- Standards PSR : FIG Standards
- Conventions Symfony : Symfony Code Standards