Symfony, le framework qui réconcilie PHP et développeurs ?

Pourquoi choisir Symfony pour un projet de développement web ? Avantages et fonctionnalités incontournables du framework.
JonathanM.jpg
Jonathan MOURIERMis à jour le 22 Avr 2021
framework symfony php

PHP, voilà le mot interdit est dit. Qu’importe si nous l’aimons ou pas, les statistiques sont là pour nous rappeler que PHPLangage de programmation s’exécutant côté serveur et permettant la création dynamique de pages web ou d'APIs. est encore utilisé par 79% des sites Web dont nous connaissons le langage de programmation côté serveur. Mais, malgré cette statistique, PHP reste dans le top 5 des langages les plus craints selon StackOverFlow ! La cause principalement à une syntaxe beaucoup trop permissive ou encore à des lenteurs inexpliquées ... en PHP 4 ou 5 ! Fort heureusement, PHP apprend de ses erreurs et évolue depuis des années, la version 7 sortie en 2015 ou encore plus récemment la version 8 sortie fin 2020 apportent à elles deux des évolutions non négligeables comme de meilleures performances, une meilleure gestion des erreurs, et surtout une mise en place du typage fort de données !

Couplé à des Frameworks tels quel Laravel ou Symfony, PHP devient une alternative concrète pour la réalisation d’API, de certains projets métier ou e-commerce !

Symfony, c’est quoi ?

Bonne question Fred ! Développé par l’entreprise française SensioLabs en 2005, SymfonyFramework PHP permettant de développer des applications web. est un FrameworkUn framework est un ensemble d'outils permettant de cadrer la façon dont on conçoit une application. MVC (modèle - vue – contrôleur) comportant de multiples composants destinés à faciliter le développement d’applications Web en PHP ! Il intègre notamment des générateurs de code, une barre d’outils pour le débogage web ou encore un serveur intégré pour démarrer le développement rapidement ! Il favorise également la maintenance à long terme grâce au très long support des versions majeures (https://symfony.com/releases).

Grand frère de Laravel (lancé en 2011 et qui lui pique moulte fonctionnalités), Symfony peut être utilisé pour développer des applications Web métiers, des APIUne API est un programme permettant à deux applications distinctes de communiquer entre elles et d’échanger des données. RESTREST (REpresentational State Transfer) est un style d'architecture logicielle qui fonctionne sous un certain nombre de contraintes. (même très facilement, nous le verrons ensuite) ou des sites avec des fonctionnalités poussées !

Si vous êtes déjà un convaincu de Symfony et que vous souhaitez démarrer un projet rapidement, je vous invite à découvrir les excellents articles de Corentin !

Pourquoi choisir Symfony pour un projet web ?

Ce ne sont pas les Frameworks qui manquent en PHP… Entre Symfony, Laravel, CodeIgniter ou encore Zend, le choix n’est pas forcément facile. Alors pourquoi choisir Symfony au détriment d’un autre ?

Tout d’abord, il est important de noter que Symfony n’est pas indiqué pour la réalisation de tous les projets ! Développer un site vitrine ou un simple blog avec ce Framework serait inutile car il est bien trop lourd ! Non, Symfony est plutôt indiqué pour la réalisation de projets d’envergure, nécessitant beaucoup de fonctionnalités ou encore un long support ! Son gros point fort, notamment par rapport aux autres frameworks, est qu’il permet d’avoir une organisation de code propre, ce qui permet un démarrage rapide du projet et du code métier !

En plus des points précédemment cités, voici quelques autres éléments de réponse qui font la force de Symfony :

Des outils pour se faciliter la vie

En prenant en charge un certain nombre de tâches désagréables (développement de fonctionnalités mineures par exemple), Symfony permet aux développeurs de se concentrer plus rapidement sur le code métier de leur application ! Parmi les outils incontournables de Symfony, nous pouvons citer la barre très complète de débogage (également accessible en mode API (via un /_profiler)), la prise en charge native des environnements de développement, les pages d’erreur détaillées ou encore la sécurité native.

Une documentation fournie et une forte communauté

Qu’importe la version de Symfony, la documentation est très complète et des exemples de code sont fournis en plus des explications. La communauté est également forte, vous trouverez toujours réponses à vos questions. De plus, ils contribuent grandement à la croissance de Symfony !

Des performances au rendez-vous !

Symfony est reconnu pour sa capacité à optimiser les performances des applications ! Symfony se classe d’ailleurs 3e au classement phpbenchmarks.com devant Laravel et Zend Framework.

Les références

Beaucoup d’intranets, de sites grand public ou de réseaux sociaux font confiance à Symfony ! Nous pouvons citer par exemple Yahoo.com ou encore Dailymotion qui sont développés avec Symfony. Par ailleurs, la structure du CMSC'est un système de gestion de contenu. e-commerce Prestashop se base aussi sur Symfony, tout comme le CMS Drupal.

L’interopérabilité

L’idée de Symfony est de ne pas s’enfermer dans Symfony ! Symfony respecte les standards de PHP que ce soit autant les conventions de dénomination de classes ou encore celles de PHPUnit. Par ailleurs, Symfony utilise lui-même des librairies externes de base, l’ORM Doctrine ou encore Swiftmailer pour l’envoi de mails sont de parfaits exemples ! Enfin, Symfony permet aussi d’utiliser certaines de ces briques ailleurs. Si nous voulons par exemple utiliser le var-dumper de Symfony sur CodeIgniter ou WordPress, c’est totalement possible !

Quelques fonctionnalités et bundles incontournables de Symfony

Doctrine, un ORM puissant

Comment parler de bundle sans parler de l’ORM Doctrine ! Doctrine est inspiré de l’ORM JavaLangage de développement très populaire ! Hibernate et se base sur le patron de conception data mapper. Officiellement devenue la bibliothèque d’ORM par défaut à partir de Symfony 1.3, Doctrine se compose de deux grandes parties :

  • Doctrine ORM (mapping objet-relationnel) qui se base sur Doctrine DBAL
  • Doctrine DBAL (Couche d’abstraction de base de données) qui se base sur PDO, l’interface objet permettant à PHP de communiquer avec une base de données

L’une des forces de Doctrine réside dans son langage de requête orienté objet, le DQL (Doctrine Query Langage). Sa syntaxe s’inspire du HQL (Hibernate Query Langage) et permet de créer des requêtes simplement en utilisant des objets comme dans les deux exemples ci-dessous.


/** @var $user User */ 
$user = $this->getDoctrine()->getRepository(User::class)
    ->findOneBy([‘id => ‘15’]);

/** @var $users User[] */      
$users = $this->createQueryBuilder(’u’)
    ->where(’u.firstName like :name’)
    ->setParameter(’name’, ’%Jonathan%’)
    ->orderBy(’u.createdAt’, ’DESC’)
    ->getQuery()
    ->getResult()

Doctrine peut également être utilisé avec de nombreux autres Frameworks tels que Zend Framework ou encore CodeIgniter, bien que Symfony soit celui qui l’intègre le mieux !

Ensuite, comment pouvons-nous parler de Doctrine sans parler des migrations ? Un système capable de versionner votre base de données, un outil très puissant et assez facile à utiliser ! 

doctrine-symfony-php.png

Les migrations peuvent être écrites manuellement ou générées simplement via une commande Symfony (cf. point suivant). Ces migrations, écrites en PHP et répertoriées dans la base de données, se basent sur les entités déclarées sur Symfony. Elles permettent de modifier la base automatiquement ou encore de revenir en arrière en cas d’erreur.

Les commandes Symfony

Symfony embarque de nombreuses commandes via le script bin/console, des commandes créées par le composant Console. Par ailleurs, ce composant permet également de créer ses propres commandes. Une des commandes les plus connus est le fameux :

bin/console cache:clear

Il permet, comme son nom l’indique, de supprimer le cache de Symfony. Ci-dessous, voici une liste de commandes disponible, nous y retrouvons d’ailleurs les fameuses commandes Doctrine pour créer et exécuter les migrations. 

commandes-symfony-php.png

Comme dit juste avant, il est également possible de créer soi-même ses commandes assez facilement. Cela peut être utile pour créer une tache CRON ou encore pour générer des utilisateurs pendant le développement. Par exemple, ci-dessous nous créons une commande d’envoi de mails.

class SendMailCommand extends AbstractCommand
{
    const DAYS_BEFORE_END_DATE = [1,5];

    protected function configure()
    {
        $this
            ->setName(’app:send-mail’)
            ->setDescription(’Sends mails for users’)
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        //TODO code Here
    }
 }

Puis en faisant un bin/console list, nous pouvons voir notre nouvelle commande.

Maker Bundle

Dans la continuité des commandes Symfony, le Maker Bundle vient ajouter des commandes de création aux déjà nombreuses commandes de Symfony ! A l’aide d’un bin/console make list, nous pouvons voir la liste complète des constructeurs disponibles. Par exemple la commande make:entity vous ouvrira un assistant pour créer une entité Doctrine, la commande make:migration créera automatiquement un nouveau fichier de migration avec, s’il y en a, les nouvelles modifications d’entités. 

maker-bundle-symfony-php.png

API Platform, le générateur d’APIs clé en main

Il s’agit ici d’un des Frameworks (ou bundle) basé sur Symfony le plus connu et reconnu ! D’ailleurs, Fabien Potencier, le créateur de Symfony lui-même, nous dit « API Platform is the most advanced API platform, in any Framework or language. ». Si c’est Monsieur Symfony qui dit ça, c’est qu’il y a quelque chose !

API Platform, dont le sponsor principal est une société coopérative lilloise Les-Tilleuls.coop (encore une fois Cocorico), est une solution permettant de créer facilement et de personnaliser complètement des APIs en quelques minutes ! Parmi les fonctionnalités intéressantes d’API Platform, nous pouvons citer :

  • Création automatique de CRUD pour les entités
  • Documentation Swagger automatique
  • Support d’authentification JWT, CORS et OAuth
  • Gestion de pagination, d’ordre, de filtres
  • Validation des données et gestion des erreurs

API Platform est donc une solution clé en main pour générer des APIs sécurisées rapidement.

Bien sûr, la liste des bundles et fonctionnalités incontournables de Symfony est beaucoup plus longue, il s’agit ici que d’une mise en bouche !

Conclusion, pourquoi aimons-nous Symfony ?

Outre le fait que Symfony soit un produit français, il nous offre un confort de travail non négligeable et apporte des fonctionnalités indispensables à une API web ou application classique, en plus d’être un Framework stable et simple d’utilisation. Symfony se distingue notamment par son support à long terme et sa grande communauté, ce qui permet de commencer un projet sereinement ! Pour nous développer avec Symfony, c’est un grand oui !