Étant développeur PHP, j’aime faire de la veille et voir ce qui se passe ailleurs.
Pour mettre du contexte : je suis développeur Laravel depuis 6 ans, j’ai la certification Expert Laravel et je travaille dans l’une des 2 agences certifiées Laravel. Ça fait beaucoup de Laravel non ? Pourtant dès que je fais des commandes un peu poussées, j’override des classes Symfony. Et si je regarde le composer.json de Laravel je vois beaucoup de Symfony.
Alors pourquoi pas partir à la découverte de ce framework tant vanté pendant les ForumPHP ?
Je précise que je ne rentrerai pas dans le “débat” Laravel VS Symfony. Pour moi, l’un ou l’autre sont des très bons outils et je me sers de ce qui m’est utile dans l’un comme dans l’autre.😀
Je vais donc ici comparer tout un tas de choses que j’utilise quotidiennement sur Laravel en version Symfony sans trop rentrer dans le détail.
Model (make:entity)
Il suffit de faire “php bin/console make:entity” pour faire un Model. À la différence de Laravel, la création et la modification (uniquement l’ajout de champ) du Model peut se faire de façon interactive. Il y a même la possibilité de faire les relations avec. Il existe pas mal d'options pour générer plusieurs fichiers en même temps avec le Model dans Laravel, mais je dois dire que la commande de Symfony est plus user friendly.
Controller (make:controller)
Pour cette commande, c’est exactement comme Laravel pour un controller simple. Un template twig est ajouté par défaut avec le controller (--no-template pour empêcher ça). Pour le coup, Laravel a bien plus d'options disponibles pour la création d’un controller.
Migrations
Alors là… ça ressemble à de la sorcellerie ! Je dois dire que j’ai été bluffé par Symfony. Dans Laravel on génère manuellement des fichiers de migration pour faire évoluer la base de données. Dans Symfony c’est fait de façon automatisée grâce à une commande.
Laravel
- php artisan make:model -m User
- php artisan make:model -m Article
- on modifie à la main les migrations
Symfony
- php bin/console make:entity
- php bin/console make:entity
- php bin/console make:migration
Il y a clairement un sacré gain de temps.
Seeder / Faker
Le système de seeder n’est pas de base dans Symfony. Il faut ajouter un bundle
“doctrine/doctrine-fixtures-bundle”.
Le système de Laravel est plus simple à prendre en main et il y a une commande pour générer un fichier. Il y a surtout le système de Factory qui peut être utilisé (même si préférable de faire des seeders fixes mais ça aide pour les tests). Faker doit être installé à la main sur Symfony et si l’on veut faire des Factory, il faut le faire nous-même. Par contre, il y a une fonctionnalité de Symfony qui est vraiment top : la gestion des références ! Les références permettent de partager des models entre les fichiers de seed avec “addReference” puis d’être récupéré avec “getReference”
Dans Laravel, il faut faire attention dans DatabaseSeeder à l’ordre de nos seeder, dans Symfony on peut déclarer des dépendances.
Carbon
Carbon n’est pas installé de base mais est prévu pour fonctionner aussi sur Symfony de la même manière que Laravel : https://carbon.nesbot.com/symfony/
PHPSTAN
Sur laravel, nous avons Larastan qui est fait le grand nunomaduro mais sur Symfony c’est directement une extension officielle de phpstan. Et bien que Larastan fonctionne très bien, il y a toujours la “peur” de mettre à jour ce package. J’ai remarqué que ça semblait mieux fonctionner sur Symfony. À vérifier sur un gros projet, ça reste une supposition.
EasyAdminBundle
Nous utilisons très souvent Laravel Nova. C’est un très bon outil pour faire des back-offices rapidement. J’ai donc voulu voir la version Symfony avec un outil similaire. J’avoue avoir été un peu déçu. L’outil en lui-même fonctionne bien MAIS on ne peut pas utiliser les entités avec des clés composées (pivot de ManyToMany). Il faut obligatoirement ajouter une clé primaire si l'on veut outrepasser la chose. Et le nombre de field est assez limité même si l’on peut en faire des customs.
Je pense que c’est pas mal pour faire des choses simples, mais j’avoue que Laravel Nova semble avoir beaucoup plus de fonctionnalités que celui-ci. Surtout grâce à ce site : https://novapackages.com/ et le fait d’être en one-page avec Inertia et Vue 3. Après, il faut le rappeler : Laravel Nova est payant, pas EasyAdminBundle !
InertiaJS
C’est très dur de passer d’un site avec InertiaJS à un autre sans.. C’est vraiment un package très puissant et utile dans l’agence. Il permet d’avoir des devs frontend ne faisant pas du Blade ou du Twig tout en se passant d’une API pour les back. Bien évidemment, Laravel fait partie des frameworks officiels prévus pour être utilisés avec.
Heureusement, PHP a une communauté aussi grande que l’espace ! Il existe un package agrégé par Inertia pour l’utiliser avec Symfony et facilement installable. Je l’ai testé et ma foi ça marche bien ! À voir si dans une utilisation plus avancée ça marche tout aussi bien.
Documentation
Souvent, ce qui est reproché à Laravel c’est sa documentation. En effet, pour des débutants dans le framework, c’est pas foufou du tout. C’est bien moins dirigé que Symfony pour se lancer dans un Projet. Néanmoins, quand on sort du cercle d’initiation d’un projet, la documentation Laravel est pour moi au-dessus. Je trouve le site en lui-même plus clair, plus joli et plus détaillé.
Et pareil pour les bundles. Je trouve que Symfony devrait faire des efforts sur l’esthétisme et la navigation global de leur documentation (par exemple le menu à droite).
Système d’authentification
Histoire de se contredire, la doc pour l'authentification n'est pas fofolle dans Laravel. Pour de l’auth classique tout va bien, c’est assez simple. Par contre, il existe moult systèmes d'authentification répondant à certains besoins et s’utilisant différemment. On peut vite s’y perdre. Dans Symfony, c’est relativement simple à mettre en place l’authentification à coup de commande console.
Conclusion
Je trouve que l'approche de Symfony sur certains domaines est plutôt intelligente et simple à l’utilisation. Après, il faudrait que je fasse 2 ans de projet pour pouvoir prétendre à une comparaison plus exacte. Je dirais que j’ai eu une bonne surprise dans cette petite exploration ! Et que si l’on sait faire du Laravel, ce n'est pas bien compliqué de passer sur du Symfony. J’invite les gens à s’ouvrir à ce qui passe ailleurs et à ne pas rester cloîtré dans son framework, ça pousse à l’inventivité !