Symfony pour PHP : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que Symfony et pourquoi en a-t-on besoin ?

\n\n

Symfony est un framework composant puissant, mature et l'un des plus populaires pour le langage PHP. Il est conçu pour créer des applications web, allant des petits sites aux systèmes d'entreprise complexes. Contrairement aux frameworks monolithiques, Symfony est construit sur le principe de modularité : il se compose d'un ensemble de composants (bibliothèques) indépendants, bien documentés et réutilisables. Vous pouvez utiliser l'ensemble du framework ou seulement certains de ses composants (par exemple, uniquement le composant de requête HTTP ou de routage) dans tout autre projet PHP.

\n\n

Pourquoi en a-t-on besoin ?

\n
    \n
  • Accélération du développement : Symfony fournit des solutions prêtes à l'emploi pour les tâches courantes : routage, gestion des bases de données (via Doctrine ORM), templating (Twig), authentification, traitement des formulaires, mise en cache et bien plus encore. Vous n'avez pas à réinventer la roue.
  • \n
  • Structuration et maintenabilité : Le framework impose une architecture claire (MVC — Model-View-Controller), ce qui rend le code organisé, prévisible et facile à maintenir par d'autres développeurs.
  • \n
  • Fiabilité et sécurité : Symfony dispose de mécanismes intégrés de protection contre les vulnérabilités courantes (CSRF, XSS, injections SQL). Il est utilisé par des géants comme Drupal, phpBB et de nombreux projets d'entreprise.
  • \n
  • Communauté et écosystème : Une immense communauté, des milliers de bundles (extensions) prêts à l'emploi, une excellente documentation et un support à long terme (versions LTS).
  • \n
  • Flexibilité : Vous pouvez commencer avec un micro-framework (Symfony MicroKernel) pour une API et ajouter progressivement les composants nécessaires au fur et à mesure de la croissance du projet.
  • \n
\n\n

Installation de Symfony

\n\n

Contrairement à Python (où l'on utilise pip), en PHP, la gestion des dépendances se fait avec Composer. L'installation de Symfony comprend deux étapes : l'installation de l'installateur lui-même (Symfony CLI) et la création du projet.

\n\n

1. Installation de Composer

\n

Si vous n'avez pas encore Composer, téléchargez-le et installez-le depuis le site officiel getcomposer.org. C'est un outil global pour PHP.

\n
# Vérification de l'installation de Composer\ncomposer --version
\n\n

2. Installation de Symfony CLI (recommandé)

\n

Symfony CLI est un outil pratique pour créer, gérer et exécuter des projets.

\n
# Installation sur macOS/Linux (via curl)\ncurl -sS https://get.symfony.com/cli | bash\n\n# Installation sur Windows (via Chocolatey)\nchoco install symfony-cli\n\n# Vérification\nsymfony --version
\n\n

3. Création d'un nouveau projet

\n

Utilisez la commande symfony new pour créer le squelette de l'application.

\n
# Création d'une application web complète (avec Symfony Flex)\nsymfony new my_project --full\n\n# Création d'une micro-application (pour API)\nsymfony new my_api_project
\n

Si vous ne souhaitez pas installer la CLI, vous pouvez utiliser Composer directement :

\n
composer create-project symfony/skeleton:"7.0.*" my_project\n# Ou pour une application complète :\ncomposer create-project symfony/website-skeleton:"7.0.*" my_project
\n\n

Démarrage rapide avec un exemple de code

\n\n

Créons une simple page "Hello, World!" avec Symfony.

\n\n

1. Création d'un contrôleur

\n

Un contrôleur est une classe PHP qui traite une requête et renvoie une réponse. Créez le fichier src/Controller/HelloController.php :

\n
<?php\n// src/Controller/HelloController.php\n\nnamespace App\\Controller;\n\nuse Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController;\nuse Symfony\\Component\\HttpFoundation\\Response;\nuse Symfony\\Component\\Routing\\Annotation\\Route;\n\nclass HelloController extends AbstractController\n{\n    #[Route('/hello/{name}', name: 'hello_page')]\n                    

Recommendations