Introduction
Symfony a été créé le 18 octobre 2005 dans le but d’éviter de recréer sans arrêt les mêmes fonctionnalités de gestion d’utilisateurs, gestion d’ORM, etc.
Les bundles suivent le même but, à moindre échelle bien sur, permettant aux développeurs d’utiliser des outils/plug-in déjà éprouvés par la communauté.
Cependant, en parcourant différents sources (Packagist, Symfony Recipes Server, Github, etc.), on se rend compte que l’on peut vite se perdre devant le grand nombre de bundles disponibles.
Nous allons ici proposer les meilleurs bundles pour vos applications Symfony et ce en fonction de leur périmètre fonctionnel.
Qualité
PHP CS Fixer (https://github.com/FriendsOfPHP/PHP-CS-Fixer)
PHP CS Fixer est un outil qui va vous permettre de contrôler la qualité de votre code en suivant les standards définis par les PSR-1, PSR-2, etc. Vous pouvez même définir vos propres règles.
PHP MD (https://phpmd.org/download/index.html)
PHP MD est un outil permettant de sonder votre code à la recherche d’éventuels bugs ou paramètres/méthodes non utilisés. Celui-ci peut également vous indiquer la complexité cyclomatique de vos méthodes.
PHP Stan (https://github.com/phpstan/phpstan)
PHP Stan est outil permettant la détection des erreurs de votre projet sans avoir à l'exécuter. Celui-ci est rapide et extensible.
PHPUnit (https://github.com/sebastianbergmann/phpunit)
PHPUnit est un outil permettant de rédiger vos tests unitaires garantissant ainsi la couverture de votre application.
Behat (https://github.com/Behat/Behat)
Behat est un outil de test s’approchant de la méthode agile BDD encourageant la collaboration entre les développeurs, les responsables qualités, etc.
Avec celui-ci, vous serez à même de rédiger des tests fonctionnels de bout en bout de votre application. Il peut être utilisé aussi bien pour le test d'API ou, par le biais d'extension, le test lié au front.
Panther (https://github.com/symfony/panther)
Panther est un outil vous permettant de tester votre application fonctionnellement reproduisant toutes les interactions du navigateur (soumission de formulaire, clic sur des boutons, etc.). Il suffit d'avoir un navigateur installé sur la machine exécutant le test
GrumPHP (https://github.com/phpro/grumphp)
GrumPHP est un outil qui permet de lancer différents tests à partir de hook git (pre-commit, post-commit, pre-commit-msg, etc.). GrumPHP intègre les principaux outils de contrôle qualité nommés précédemment, mais on peut également y ajouter ses propres scripts de contrôle.
AliceBundle (https://github.com/hautelook/AliceBundle)
Pour créer différentes batteries de test, on a souvent besoin de créer des données factices pour différents scénarios. AliceBundle vous permet la création de ces fixtures simplement. Une autre alternative existe via le bundle proposé par Doctrine DoctrineFixturesBundle" offrant le même type de service.
API Rest
API Platform (https://github.com/api-platform/api-platform)
API Platform est un framework écrit en PHP 7 et basé sur Symfony destiné à la création d’API Web modernes, puissantes et sécurisées. La grande force de cet outil est la simplicité avec laquelle vous allez pouvoir exposer les APIs de vos ressources sans avoir à les coder.
NelmioApiDocBundle (https://github.com/nelmio/NelmioApiDocBundle)
ApiDocBundle est un bundle qui vous permettra de générer la documentation nécessaire à l’utilisation de vos APIs directement depuis les sources de votre projet.
Guzzle (https://github.com/guzzle/guzzle)
Guzzle est un client HTTP qui vous permettra de gérer vos requêtes facilement. Celui-ci gère différents types d’appel Curl, PHP Stream Wrapper, socket, ...
LexikJWTAuthenticationBundle (https://github.com/lexik/LexikJWTAuthenticationBundle)
LexikJWTAuthenticationBundle est un bundle qui vous permettra de sécuriser vos APIs par le biais d’échange sécurisé de jetons (token). Celui-ci s'appuie sur le standard RFC 7519 (Json Web Token)
oauth2-server (https://github.com/thephpleague/oauth2-server)
oauth2-server est un bundle permettant l'implémentation conforme d'un serveur d'autorisation OAuth2.0 écrit en php. Ainsi, vous pourrez configurer votre serveur pour protéger vos APIs avec des jetons d'accès.
OAuth est un protocole libre qui permet d'autoriser un site web, un logiciel ou une application à utiliser l’API sécurisée d’un autre site web.Base de données
Doctrine ORM (https://github.com/doctrine/orm)
Doctrine ORM est un bundle qui va vous permettre gérer simplement et efficacement la vie de votre base de données (créations, mises à jour, etc.).
Média
Glide (https://github.com/thephpleague/glide)
Glide est un bundle permettant la manipulation et l'optimisation de vos images. Ainsi, le changement d'orientation, l'ajout des effets et le rognage vos images n'auront plus de secrets.
Back Office
Sonata et EasyAdmin (SonataAdminBundle, EasyAdmin)
Ces deux bundles proposent la mise en place d’un back office permettant l’administration de vos entités. Leur principale différence est que Sonata nécessitera un peu plus de travail pour une première mise en main, en effet, EasyAdmin ne demande que quelques modifications dans un fichier de configuration pour commencer à travailler sur ses entités alors que pour Sonata, il faudra, en plus de quelques modifications à la configuration, créer ses propres formulaires de gestion d’entités (de la même façon que la création de formulaire).
Process Asynchrones
RabbitMqBundle (https://github.com/php-amqplib/RabbitMqBundle)
RabbitMqBundle est un bundle qui vous pemettra d’intégrer la messagerie AMQP dans votre application.
Pour pouvoir mettre en place ce type de service, vous aurez besoin de disposer d’un serveur RabbitMq.
Si vous n’avez pas la possibilité de le faire, l’outil CloudAMQP propose ce genre de service proposant différentes offres en fonction de vos besoins.
Monitoring
Monolog (https://github.com/Seldaek/monolog)
Monolog est un bundle qui vous permettra de gérer vos logs. Cet outil est complet et au delà de l’écriture des logs, celui-ci permet également l’envoi d’alertes et d’emails, d’envoi vers des serveurs spécifiques (amqp, new relic, etc.), le stockage en base de données et un affichage console via navigateur.
Sentry (https://github.com/getsentry/sentry)
Sentry est un outil de monitoring en temps réel. Il vous permettra de catcher les exceptions non gérées avec leur contexte associé. Sentry fournit également une offre hébergée chez eux (dont une gratuite), qui vous permet de tester plus rapidement.
Conclusion
Il peut être difficile de faire son choix parmi une liste de bundle proposant tous des services intéressant pour son projet. Bien sûr, cette liste n'est pas exhaustive, de nombreux outils existent et se révèlent très intéressant selon leur périmètre comme FOSElasticaBundle ou Algolia pour l'utilisation d'ElasticSearch, SncRedisBundle pour Redis, MakerBundle vous permettant la génération de votre code Symfony (Entités, controllers, commands, etc.).
Si toutefois vous aviez un besoin bien spécifique et souhaitez profiter d'un bundle déjà existant ne figurant pas dans cette liste, lors de votre recherche, vous pouvez vous fier à différentes métriques comme le nombre de downloads, de contributeurs, de stars ou la date du dernier commit.
Et vous, quels sont vos bundles favoris ? :)