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