Structure Arborescence Symfony

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 classe MONPROJET\MonEspace\MaClasse doit être placée dans le fichier suivant :
    src/MONPROJET/MonEspace/MaClasse.php.
  • Contenu typique :
    namespace MONPROJET\MonEspace; class MaClasse { public function maMethode() { // ... } }
  • Règles importantes :
    • Ne pas utiliser de tirets bas _ dans les noms de classe.
    • Respecter l’organisation définie par PSR-4.

Conventions de Nommage

  1. Camel Case (majuscule pour chaque mot) :
    • Classes : IdentificationUtilisateurService
    • Méthodes : maMethodeDeService()
    • Attributs : monAttribut
    • Constantes : NOMBRE_DE_ROUES
  2. Snake Case (minuscule avec underscores _) :
    Utilisé pour :

    • Variables Twig : http_status_code
    • Paramètres de configuration : framework.csrf_protection
  3. 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).
  4. 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 :
    /** * @Route("/hello/world", name="ma_route") */ public function hello() { return new Response('Hello world!'); }

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 :
    #[Route("/hello/world", name: "ma_route", methods: ["GET"])] public function hello() { return new Response('Hello world!'); }

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

Sites Ressources e-Plus Pour Laravel 11

1. Packagist Description : Le principal dépôt de packages PHP, avec une catégorie spécifique pour Laravel. Lien : https://packagist.org Ressources :...