Symfony2 et ses bundles


Technique

Symfony2 utilise une structure architecturée autour de modules, appelés Bundles, qui s’interconnectent entre eux et à l’application via le système d’injection de dépendances. Cette fonctionnalité placée au coeur de Symfony2 est d’une puissance redoutable car bien que le code de chaque Bundle soit clairement séparé dans son propre répertoire, les interactions avec l’application sont infinies.

Qu’il s’agisse d’ajouter un simple service de log-in, d’implémenter un système de manipulation d’images ou carrément de mettre en place une interface d’administration complète, les Bundles vous offrirons cette possibilité en toute simplicité grâce à leur installation aisée (via composer) et leur intégration fluide à l’application.


Voici une liste non exhaustive de Bundles que nous avons eu l’occasion d’utiliser ou qui semblent particulièrement intéressants :

  • FOSUserBundle : Installation d’un système d’utilisateurs complet et prêt à l’emploi. Ses avantages : il est compatible avec beaucoup d’autres bundles (FOSRestBundle, SonataAdmin, etc.) et embarque le formulaire d’inscription, ainsi que le mot de passe oublié, que l’on aimerait éviter d’avoir à recréer (traduit dans des dizaines de langues SVP !) ! Il gère également ORM, ODM, Propel, donc si un jour pour un besoin ou un autre, vous devez changer de base de données, le refactoring sera minime.
  • FOSRestBundle : Ce bundle permet de gérer toutes les méthodes REST (GET, POST, PUT, DELETE, PATCH..) et gère le module de sécurité de SF2. Il prend également en charge la serialisation/deserialisation des données xml/json via le bundle JMS. A noter qu’un FORK de l’édition standard de Symfony existe : il embarque un SF RESTful prêt à l’emploi basé sur FOSRest + NelmioAPI : https://github.com/gimler/symfony-rest-edition (et embarque même des exemples d’utilisation).
  • JMSSerializerBundle : En quelque sorte un “must-have” lorsque l’on souhaite créer une API, ou lorsque l’on a besoin de mapper un webservice à une entité doctrine2 ! Concrètement, il peut vous convertir un objet en JSON et à l’aide d’annotations, montrer ou cacher certains champs de votre entité. Très pratique !
  • SonataAdmin : une interface d’admin rapidement personnalisable, permettant de créer des backoffices en deux coups de cuillère à pot.
  • SyliusBundles : Plateforme e-commerce maintenant gérée par KnpLabs et très prometteuse !
  • GenemuFormBundle : des customs selectbox, recaptcha, tinymce, datepicker, colorpicker, slider, autocomplete, rating, fileupload…. Bref tout ce qui est un peu lourd et rébarbatif à développer 😉
  • BazingaFakerBundle : Une sorte de lorem lipsum auto pour vos fixtures
  • IgorwFileServeBundle : Permet de servir des fichiers sécurisés
  • NelmioApiDocBundle : Génère un Doc pour une API REST quasi automatiquement via une interface sexy.
  • LswMemcacheBundle : Facilite le debug memcached, ajoute une icône à la doctrine dans la barre d’outils debug SF2 (mais comporte aussi des détails/stats dans le profiler)
  • JSMysqlndBundle : Stats de mysqlnd dans votre profiler sf2
  • WebProfilerExtraBundle : Ajoute dans la toolbar sf2 des infos sur les templates twig, assetic, container, etc. mais aussi ds le profiler (toolbar, mais aussi le contenu des variables)
  • ZenstruckCacheBundle : Fini le cache vide!
  • NelmioJsLoggerBundle : Logger les erreurs JS côté client.
  • JnsXhprofBundle : Xhprof profiler
  • LexikMaintenanceBundle : Met le site indisponible en une seule commande et autorise l’accès pour certaines IP seulement
  • BazingaExposeTranslationBundle : Expose vos traductions au front côté JS (gère la pluralization, etc)
  • FOSJsRoutingBundle : Expose vos routes côté JS
  • APYJsFormValidationBundle : Ajoute la validation JS qui manque à SF2 !! Généré automatiquement & compatible avec les @Assert de SF2 !!
  • AdmingeneratorGeneratorBundle : L’approche est différente de Sonata, ce bundle génère le scaffolding de votre BDD, et donc créée les fichiers controllers/templates qui sont donc personnalisables. Un peu à la manière de SF1.
  • MopaBootstrapBundle : Intégration de Twitter Bootstrap. Gère les différents formats de formulaires (à surveiller également BcBootstrapBundle)
  • KnpMenuBundle : Création d’un menu.
  • FOSFacebookBundle : Permet d’ajouter Facebook comme méthode d’authentification à FOSUserBundle et donc stocker l’utilisateur en BDD sans peine.
  • AvalancheImagineBundle : Intègre la librairie de manipulation d’images Imagine, puis permet de définir des filtres pour gérer les différents formats d’images (thumb, normal, big, etc.)
  • CraueFormFlowBundle : Des formulaires en plusieurs étapes.
  • KnpTimeBundle : Des helpers twig permettant d’afficher des dates sous forme de “Il y a 3 minute” (time ago)
  • JMSDiExtraBundle : Permet de gérer les services et les injections de dépendances directement via les annotations, ce qui procure une meilleure lisibilité de l’utilisation des services, qui plus est, évite de jongler avec le fichier services.xml.
  • LadyBugBundle : Une sorte de “var_dump” plus poussé, permettant de dumper les variables dans les controllers, mais aussi dans les templates twig. En plus de ça, le rendu est plutôt élégant.

Conclusion

Une des règles d’or de “l’ère” Symfony2 et Composer est d’éviter de réinventer la roue. Il existe maintenant une panoplie de librairie PHP ainsi que des bundles Symfony2. On ne vous répétera  jamais assez de ne pas hésiter à en faire l’usage pour plusieurs raisons. Premièrement parce qu’ils sont maintenus par la communauté et évolueront de manière autonome. Deuxièmement, parce que la plupart sont testés unitairement, et comportent des dizaines de tests (voir centaines). Ce qui signifie qu’en plus de vous faire gagner du temps, ils se montrent particulièrement fiables.

Le site KnpBundles vous permettra d’en découvrir de nouveaux ;  il y a, à l’heure actuelle, environ 2011 bundles.

Nous vous laissons avec ces superbes slides qui font un beau tour d’horizon des bundles à ne pas manquer !

 

 

 

Laisser un commentaire