Symfony vs Lavarel : quel framework PHP choisir ?

Symfony et Laravel sont les frameworks PHP les plus populaires. Les deux sont éprouvés et ont été testés sur le terrain, mais chacun présente ses propres avantages et inconvénients. Nous expliquons ci-dessous comment fonctionnent les structures PHP et pour quels types de projets Laravel et Symfony sont les plus appropriés.

Qu’est-ce que PHP et quels sont les frameworks PHP?

Sorti au milieu des années 1990, PHP a été le premier langage de programmation Web. Les Personal Home Page Tools, comme le langage a été initialement appelé, ont facilité l’assemblage dynamique de documents HTML sur un serveur. Voyons plus précisément ce que cela signifie.

Les documents HTML constituent la base de l’information trouvée sur le Web. Le contenu actuel est structuré grâce aux balises HTML. Le HTML devient intéressant lorsque des contenus dynamiques sont insérés dans une page statique. C’est sur ce point que PHP a été révolutionnaire. Le langage peut être incorporé dans des documents HTML et d’autres documents textes. La structure statique est conservée, les informations dynamiques sont insérées par du code inséré entre des balises PHP spéciales. Par exemple, pour afficher le nom d’un utilisateur dans un message de bienvenue :

<h1>
    Bienvenue, <?PHP echo $user ?>
</h1>
PHP
Conseil

Vous souhaitez en savoir plus sur le langage PHP ? Vous trouverez toutes les bases et les premières étapes à connaître dans notre tutoriel PHP.

Le besoin récurrent de fonctions d’application Web telles que la connexion à la base de données, l’authentification des utilisateurs et la validation des formulaires a conduit à l’apparition du framework Web PHP. Conceptuellement situés entre la bibliothèque de programmation et le système de gestion de contenu, les calques ainsi que les composantes du contenu sont adaptés à l’assemblage de systèmes plus grands. En plus de Laravel et Symfony, il existe maintenant un certain nombre d’autres frameworks PHP matures :

  • CakePHP, 2005 ;
  • Symfony, 2005 ;
  • CodeIgniter, 2006 ;
  • Projet Laminas, anciennement Zend Framework, 2006 ;
  • Yii, 2008 ; et
  • Laravel, 2011.

Symfony vs Lavarel

Les frameworks PHP Laravel et Symfony ont plusieurs points en commun. Les deux sont des projets Open Source et sont adaptés à la création d’applications Web basées sur serveur. Laravel et Symfony utilisent le modèle MVC (Model View Controller) pour séparer les problèmes critiques. Les demandes adressées à l’application Web sont traitées par un contrôleur qui gère les données relatives au modèle et les présente dans la vue :

  • Modèle : modèle de données et gestion ;
  • Vue : interface utilisateur ;
  • Contrôleur : interface entre le modèle et la vue.

Laravel et Symfony ont contribué de manière significative au développement de l’écosystème PHP. Ainsi, d’importantes technologies basées sur le PHP ont émergé de ces deux frameworks et sont également utilisés dans d’autres projets. Symfony est notamment célèbre pour la structure modulaire des composants découplés les uns des autres. Ainsi, d’autres frameworks PHP tels que YII et Laravel utilisent des composants Symfony.

Avec Composer, il existe une base solide pour la gestion des paquets pour les projets en PHP dans Laravel et Symfony. En plus de la structure réelle, d’autres composants peuvent être installés et gérés. Composer est disponible sur tous les systèmes d’exploitation de serveur et il peut être utilisé via PHP sur Ubuntu ou par l’entremise des packs d’hébergement Web de IONOS.

Conseil

Accédez rapidement à votre propre site Web avec un hébergement Web sécurisé incluant le nom de domaine grâce aux packs d’hébergement Web IONOS.

Nous faisons ici référence aux versions de frameworks Laravel 4+ et Symfony 2/3, considérant que les versions antérieures sont complètement différentes. Examinons en détail les caractéristiques suivantes de Laravel et Symfony :

Fonctionnalités Symfony Laravel
Templating Twig Blade
ORM Doctrine Eloquent
CLI bin/console artisan
Configuration YAML PHP

Modélisation via Laravel et Symfony

L’arrivée du modèle PHP, qui combine des composants statiques et dynamiques, a été révolutionnaire. Auparavant, tout le code HTML devait être combiné par programmation en utilisant la concaténation de chaînes de pièces statiques et de valeurs générées dynamiquement. Cette approche était complexe et sujette aux erreurs parce qu’elle était difficile à comprendre.

En plus d’intégrer du code dans des textes statiques, la fonction include a contribué de manière significative au succès de PHP. La commande include vous permet d’assembler une page à partir de plusieurs morceaux, ce qui permet de réaliser des mises en page cohérentes. Par exemple, plusieurs pages avec un contenu différent peuvent avoir le même menu de navigation.

Le modèle consiste à créer des documents HTML à partir de modèles statiques et de composants dynamiques. Si vous utilisez PHP directement comme langage de modèle, des inconvénients majeurs deviennent rapidement apparents. Puisque HTML, PHP, SQL, CSS et JavaScript peuvent être présents dans un fichier PHP, il y a un manque de séparation des intérêts. De plus, des vulnérabilités de sécurité peuvent résulter des injections SQL et de cross site scripting (XSS).

Pour éviter ces impacts négatifs, Laravel et Symfony ont tous deux leur propre langage. Ceux-ci acceptent les données et rendent le code HTML. Une séparation nette des problèmes est garantie car la sortie est automatiquement nettoyée par une séquence d’échappement, empêchant ainsi l’injection de code. Les documents PHP ou HTML générés peuvent être temporairement stockés en cache.

Le langage de Symfony, Twig, permet la création de familles de documents complexes, y compris les mises en page, les partials et les composants. Twig contient de nombreux filtres et fonctions utiles et s’appuie sur une syntaxe facile à apprendre. Créons dynamiquement une liste d’utilisateurs :

<h1>Users</h1>
<ul>
    {% for user in users %}
        <li>{{ user.name }}</li>
    {% endfor %}
</ul>
twig

Laravel s’appuie sur le langage spécialement développé appelé Blade. Contrairement à Twig, les modèles peuvent contenir du code PHP arbitraire. Comme dans Twig, les expressions placées entre des doubles accolades sont évaluées et le résultat est affiché. Voici le même exemple en Blade:

<h1>Users</h1>
<ul>
    @foreach ($users as $user)
        <li>{{ $user->id }}</li>
    @endforeach
</ul>
blade

Applications Web dans Laravel et Symfony

Les modèles sont suffisants pour des sites Web purement informatifs sans fonctionnalité. Une page est assemblée sur le serveur et présentée aux visiteurs. Muni d’une couche de cache, vous disposez déjà d’une solution passable. Cependant, les applications Web nécessitent une approche plus avancée.

Une application Web 2.0 classique nécessite généralement que les utilisateurs se connectent, créent et modifient du contenu. En d’autres termes, une application de base de données comprenant les principales opérations de base de données CRUD est nécessaire. Pour que cela fonctionne pour plusieurs utilisateurs, des approches d’authentification, de gestion des droits et de gestion des sessions sont nécessaires.

En principe, le PHP contient les blocs requis. Par exemple, le langage inclut des fonctions permettant d’accéder aux cookies, de gérer les sessions et bien plus encore. Il est également possible de contrôler la connexion à une base de données, l’exécution des requêtes et l’accès aux valeurs de la requête HTTP. De plus, des fonctions de bas niveau peu abstraites et des variables globales telles que $_GET, $_POST et $_COOKIE sont utilisées de manière inhérente.

En pratique, les équipes de développement ont eu tendance à réinventer la roue avec chaque nouvelle application Web. Cela a conduit à de nombreux développements internes plombés par des failles de sécurité et un manque de documentation. Une approche normalisée ou un outil de création solide contenant les composants de haute qualité était nécessaire. C’est ce qui a favorisé l’émergence de frameworks de développement Web.

Le mapping objet-relationnel (ORM) agit comme une interface entre un code orienté objet et une base de données relationnelle. Une application Web est issue des interactions entre les utilisateurs et les données qui changent au fil du temps. En général, l’application est écrite dans un langage de programmation orienté objet, tandis que la mémoire est basée sur une base de données relationnelle. Laravel et Symfony ont tous deux leur propre implémentation de l’ORM.

L’ORM utilisé dans Symfony est appelé Doctrine et est géré comme un projet indépendant. Doctrine repose sur le modèle Data Mapper et comprend plusieurs composants. Par exemple, il existe une mise en cache en plus de l’ORM. L’ORM Eloquent de Laravel suit le modèle Active Records et est considéré comme le plus facile à utiliser. Les deux ORM peuvent être connectés à différents backends de base de données.

L’App Scaffording dans Laravel et Symfony

Laravel et Symfony possèdent leur propre interface de ligne de commande (CLI) pour la gestion de projet. Par exemple, la CLI peut être utilisée pour l’App Scaffolding*.* Cela signifie la construction automatisée de structures de projet telles que des composants de contrôleur de vue de modèle ou des modèles de base de données.

L’interface de ligne de commande de Laravel, nommée artisan, et celle de Symfony, nommée bin/console, contiennent une variété de commandes utiles. Une application Laravel ou Symfony existante est requise avant de pouvoir accéder à la CLI. L’installation initiale d’une application Laravel ou Symfony utilise généralement Composer.

En résumé : les avantages et inconvénients de Laravel et Symfony

Laravel et Symfony sont des frameworks Web éprouvés. Laravel est considéré comme plus simple et mieux adapté aux petits projets. La courbe d’apprentissage facile et les résultats rapides ont contribué au succès de ce framework PHP populaire.

Symfony est célèbre pour ses composants découplés. Ceux-ci peuvent être utilisés ensemble en tant que framework Web ou individuellement dans le cadre d’un logiciel personnalisé. Laravel se concentre sur la simplicité alors que Symfony s’efforce d’être flexible, ce qui le rend plus adapté aux projets complexes avec des exigences particulières.

Résumé comparatif des avantages et des inconvénients de Symfony et Laravel:

Critère Symfony Laravel
Fonctionnalités +++ ++
Maturité +++ +++
Simplicité + ++
Flexibilité +++ +
Facilité d’utilisation + +++
Communauté ++ +++
En résumé

Quel framework utilisé dans quelle situation ? En bref, Laravel est le meilleur choix pour les débutants et les petits projets, alors que Symfony possède une structure modulaire et peut être adapté de manière flexible aux conditions spécifiques. Cela le rend particulièrement adapté aux applications complexes.