Symfony et Laravel sont les fra­me­works PHP les plus po­pu­laires. Les deux sont éprouvés et ont été testés sur le terrain, mais chacun présente ses propres avantages et in­con­vé­nients. Nous ex­pli­quons ci-dessous comment fonc­tion­nent les struc­tures PHP et pour quels types de projets Laravel et Symfony sont les plus ap­pro­priés.

Qu’est-ce que PHP et quels sont les fra­me­works PHP?

Sorti au milieu des années 1990, PHP a été le premier langage de pro­gram­ma­tion Web. Les Personal Home Page Tools, comme le langage a été ini­tia­le­ment appelé, ont facilité l’as­sem­blage dynamique de documents HTML sur un serveur. Voyons plus pré­ci­sé­ment ce que cela signifie.

Les documents HTML cons­ti­tuent la base de l’in­for­ma­tion trouvée sur le Web. Le contenu actuel est structuré grâce aux balises HTML. Le HTML devient in­té­res­sant lorsque des contenus dy­na­miques sont insérés dans une page statique. C’est sur ce point que PHP a été ré­vo­lu­tion­naire. Le langage peut être incorporé dans des documents HTML et d’autres documents textes. La structure statique est conservée, les in­for­ma­tions dy­na­miques sont insérées par du code inséré entre des balises PHP spéciales. Par exemple, pour afficher le nom d’un uti­li­sa­teur 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’ap­pli­ca­tion Web telles que la connexion à la base de données, l’au­then­ti­fi­ca­tion des uti­li­sa­teurs et la va­li­da­tion des for­mu­laires a conduit à l’ap­pa­ri­tion du framework Web PHP. Con­cep­tuel­le­ment situés entre la bi­blio­thèque de pro­gram­ma­tion et le système de gestion de contenu, les calques ainsi que les com­po­santes du contenu sont adaptés à l’as­sem­blage de systèmes plus grands. En plus de Laravel et Symfony, il existe main­te­nant un certain nombre d’autres fra­me­works PHP matures :

  • CakePHP, 2005 ;
  • Symfony, 2005 ;
  • Co­deIg­ni­ter, 2006 ;
  • Projet Laminas, an­cien­ne­ment Zend Framework, 2006 ;
  • Yii, 2008 ; et
  • Laravel, 2011.

Symfony vs Lavarel

Les fra­me­works PHP Laravel et Symfony ont plusieurs points en commun. Les deux sont des projets Open Source et sont adaptés à la création d’ap­pli­ca­tions Web basées sur serveur. Laravel et Symfony utilisent le modèle MVC (Model View Con­trol­ler) pour séparer les problèmes critiques. Les demandes adressées à l’ap­pli­ca­tion Web sont traitées par un con­trô­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 uti­li­sa­teur ;
  • Con­trô­leur : interface entre le modèle et la vue.

Laravel et Symfony ont contribué de manière sig­ni­fi­ca­tive au dé­ve­lop­pe­ment de l’éco­sys­tème PHP. Ainsi, d’im­por­tantes tech­no­lo­gies basées sur le PHP ont émergé de ces deux fra­me­works et sont également utilisés dans d’autres projets. Symfony est notamment célèbre pour la structure modulaire des com­po­sants découplés les uns des autres. Ainsi, d’autres fra­me­works PHP tels que YII et Laravel utilisent des com­po­sants 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 com­po­sants peuvent être installés et gérés. Composer est dis­po­nible sur tous les systèmes d’ex­ploi­ta­tion de serveur et il peut être utilisé via PHP sur Ubuntu ou par l’entremise des packs d’hé­ber­ge­ment Web de IONOS.

Conseil

Accédez ra­pi­de­ment à votre propre site Web avec un hé­ber­ge­ment Web sécurisé incluant le nom de domaine grâce aux packs d’hé­ber­ge­ment Web IONOS.

Nous faisons ici référence aux versions de fra­me­works Laravel 4+ et Symfony 2/3, con­si­dé­rant que les versions an­té­rieures sont com­plè­te­ment dif­fé­rentes. Examinons en détail les ca­rac­té­ris­tiques suivantes de Laravel et Symfony :

Fonc­tion­na­li­tés Symfony Laravel
Tem­pla­ting Twig Blade
ORM Doctrine Eloquent
CLI bin/console artisan
Con­fi­gu­ra­tion YAML PHP

Mo­dé­li­sa­tion via Laravel et Symfony

L’arrivée du modèle PHP, qui combine des com­po­sants statiques et dy­na­miques, a été ré­vo­lu­tion­naire. Au­pa­ra­vant, tout le code HTML devait être combiné par pro­gram­ma­tion en utilisant la con­ca­té­na­tion de chaînes de pièces statiques et de valeurs générées dy­na­mi­que­ment. Cette approche était complexe et sujette aux erreurs parce qu’elle était difficile à com­prendre.

En plus d’intégrer du code dans des textes statiques, la fonction include a contribué de manière sig­ni­fi­ca­tive 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 co­hé­rentes. Par exemple, plusieurs pages avec un contenu différent peuvent avoir le même menu de na­vi­ga­tion.

Le modèle consiste à créer des documents HTML à partir de modèles statiques et de com­po­sants dy­na­miques. Si vous utilisez PHP di­rec­te­ment comme langage de modèle, des in­con­vé­nients majeurs de­vien­nent ra­pi­de­ment apparents. Puisque HTML, PHP, SQL, CSS et Ja­vaS­cript peuvent être présents dans un fichier PHP, il y a un manque de sé­pa­ra­tion des intérêts. De plus, des vul­né­ra­bi­li­tés de sécurité peuvent résulter des in­jec­tions 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é­pa­ra­tion nette des problèmes est garantie car la sortie est au­to­ma­ti­que­ment nettoyée par une séquence d’échap­pe­ment, empêchant ainsi l’injection de code. Les documents PHP ou HTML générés peuvent être tem­po­rai­re­ment 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 com­po­sants. Twig contient de nombreux filtres et fonctions utiles et s’appuie sur une syntaxe facile à apprendre. Créons dy­na­mi­que­ment une liste d’uti­li­sa­teurs :

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

Laravel s’appuie sur le langage spé­cia­le­ment développé appelé Blade. Con­trai­re­ment à Twig, les modèles peuvent contenir du code PHP ar­bi­traire. Comme dans Twig, les ex­pres­sions 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

Ap­pli­ca­tions Web dans Laravel et Symfony

Les modèles sont suf­fi­sants pour des sites Web purement in­for­ma­tifs sans fonc­tion­na­lité. 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 ap­pli­ca­tions Web né­ces­si­tent une approche plus avancée.

Une ap­pli­ca­tion Web 2.0 classique nécessite gé­né­ra­le­ment que les uti­li­sa­teurs se con­nec­tent, créent et modifient du contenu. En d’autres termes, une ap­pli­ca­tion de base de données com­pre­nant les prin­ci­pales opé­ra­tions de base de données CRUD est né­ces­saire. Pour que cela fonc­tionne pour plusieurs uti­li­sa­teurs, des approches d’au­then­ti­fi­ca­tion, de gestion des droits et de gestion des sessions sont né­ces­saires.

En principe, le PHP contient les blocs requis. Par exemple, le langage inclut des fonctions per­met­tant 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 abs­traites et des variables globales telles que $_GET, $_POST et $_COOKIE sont utilisées de manière inhérente.

En pratique, les équipes de dé­ve­lop­pe­ment ont eu tendance à réin­ven­ter la roue avec chaque nouvelle ap­pli­ca­tion Web. Cela a conduit à de nombreux dé­ve­lop­pe­ments internes plombés par des failles de sécurité et un manque de do­cu­men­ta­tion. Une approche nor­ma­li­sée ou un outil de création solide contenant les com­po­sants de haute qualité était né­ces­saire. C’est ce qui a favorisé l’émergence de fra­me­works de dé­ve­lop­pe­ment Web.

Le mapping objet-re­la­tion­nel (ORM) agit comme une interface entre un code orienté objet et une base de données re­la­tion­nelle. Une ap­pli­ca­tion Web est issue des in­te­rac­tions entre les uti­li­sa­teurs et les données qui changent au fil du temps. En général, l’ap­pli­ca­tion est écrite dans un langage de pro­gram­ma­tion orienté objet, tandis que la mémoire est basée sur une base de données re­la­tion­nelle. Laravel et Symfony ont tous deux leur propre im­plé­men­ta­tion de l’ORM.

L’ORM utilisé dans Symfony est appelé Doctrine et est géré comme un projet in­dé­pen­dant. Doctrine repose sur le modèle Data Mapper et comprend plusieurs com­po­sants. 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 à dif­fé­rents backends de base de données.

L’App Scaf­for­ding 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 Scaf­fol­ding*.* Cela signifie la cons­truc­tion au­to­ma­ti­sée de struc­tures de projet telles que des com­po­sants de con­trô­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, con­tien­nent une variété de commandes utiles. Une ap­pli­ca­tion Laravel ou Symfony existante est requise avant de pouvoir accéder à la CLI. L’ins­tal­la­tion initiale d’une ap­pli­ca­tion Laravel ou Symfony utilise gé­né­ra­le­ment Composer.

En résumé : les avantages et in­con­vé­nients de Laravel et Symfony

Laravel et Symfony sont des fra­me­works Web éprouvés. Laravel est considéré comme plus simple et mieux adapté aux petits projets. La courbe d’ap­pren­tis­sage facile et les résultats rapides ont contribué au succès de ce framework PHP populaire.

Symfony est célèbre pour ses com­po­sants découplés. Ceux-ci peuvent être utilisés ensemble en tant que framework Web ou in­di­vi­duel­le­ment dans le cadre d’un logiciel per­son­na­lisé. Laravel se concentre sur la sim­pli­cité alors que Symfony s’efforce d’être flexible, ce qui le rend plus adapté aux projets complexes avec des exigences par­ti­cu­lières.

Résumé com­pa­ra­tif des avantages et des in­con­vé­nients de Symfony et Laravel:

Critère Symfony Laravel
Fonc­tion­na­li­tés +++ ++
Maturité +++ +++
Sim­pli­cité + ++
Flexi­bi­lité +++ +
Facilité d’uti­li­sa­tion + +++
Com­mu­nauté ++ +++
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 con­di­tions spé­ci­fiques. Cela le rend par­ti­cu­liè­re­ment adapté aux ap­pli­ca­tions complexes.

Aller au menu principal