Les bundles incontournables pour un nouveau projet Symfony2

composerjsonAvec le temps et l’expérience, au fil des projets Symfony2, on se rend compte que plusieurs Bundles reviennent régulièrement. Je dirai même plus qu’on se demande même comment nous ferions sans certains d’entre eux. Au contraire de ça, des Bundles ne nous semblent plus vraiment utiles, voir même gênants, même s’ils paraissent fabuleux aux premiers essais.

Voici une liste des différents Bundles Symfony2 qui me semblent incontournables.

Avant de débuter ce billet, je précise qu’à l’heure où j’écris ces lignes, je travaille sur la version 2.4~ et 2.5 de Symfony2. Peut être que d’ici quelques mois (années?), cette liste ne sera plus vraiment complète, voire sera obsolète. Si tu viens du futur (ou de Sensio), n’hésites pas à me laisser en commentaire ton avis et tes correctifs, tu aurais tort de ne pas critiquer et compléter cette liste ;) !

Les Bundles Incontournables pour un nouveau projet Symfony2

Quand je débute un nouveau projet Symfony2, il y a une petite liste de Bundles que j’ajoute les yeux fermés dans mon composer.json. Bien sur, cette liste est non-exhaustive, chacun prépare sa potion avec ses propres ingrédients. Cependant, la liste suivante ne me semble pas déconnante et me satisfait à chaque nouveau projet symfony2.

Gestion des utilisateurs : FOSUserBundle

Dans la plupart de vos sites, vous aurez besoin de gérer des utilisateurs (connexion, inscription, session…). FOSUserBundle est fait pour ça. On va pas se mentir, le composant Security natif de symfony2 fait très bien le travail et contient déjà toutes les briques principales. En revanche, l’installation du Bundle est tellement rapide et simple que s’en priver serait dommage… Ne serait-ce que pour des petites fonctionnalités comme « mot de passe oublié », ça vaut le coup.

Pourquoi ne pas utiliser son « concurrent » SonataUserBundle ? J’ai eu un peu de mal avec le Bundle d’administration de Sonata, j’y reviendrai un peu ensuite. FosUser me satisfait parfaitement.

Avantages : Rapidité d’installation, sa communauté, fiable, internationalisation déjà prévue.

Inconvénients : Pour un petit site, on pourrait penser que le Bundle est over-ingeneeré (trop gros). Le cache de la translation est costaud, on se prend un peu la tête parfois ;) !

En savoir plus sur FOSUserBundle

note : sachez qu’il est bien entendu possible de ne pas utiliser ce bundle, pour rester plus léger. Mon collègue Baptise Donaux à d’ailleurs réalisé un excellent tuto pour se passer de FOSUserBundle sur Symfony2.

Timestampable et slug : Stof Doctrine Extensions Bundle

Pour toutes mes entités créées, j’ai l’habitude de stocker plusieurs choses fortes utiles : la date de création d’une entrée, sa date de modification (si modifiée), ou bien le slug (url-isation) d’un champ de mon entité.

Le Bundle réalisé par Stof (son graph d’activité sur Github fait flipper, hein ?) est vraiment très utile. Personnellement, je ne peux plus me passer des created_at, updated_at et dans le cadre du SEO : le slug d’un champ (ex : le slug du titre d’une page).

Voir plus sur le Doctrine Extensions bundle de Stof

Des jeux de données : Doctrine Fixtures Bundle

Il est souvent très utile d’avoir des jeux de données sur lesquelles travailler. Ou plutôt : c’est carrément gonflant de se les insérer à la main dans phpmyadmin ou via un backoffice (si vous avez la chance d’en avoir un à ce stade du développement).

Ce Bundle permet d’insérer facilement des données de votre choix dans votre base de données, grâce à une commande (php app/console doctrine:fixtures:load). A chaque installation, les données pourront être facilement insérées ou remise à zéro. Très pratique pour avoir un jeu d’utilisateurs et de contenus (par exemple).

Voir plus sur le Doctrine Fixtures Bundle

Des routes dans votre Javascript : FOSJsRoutingBundle

Un autre Bundle demeure très intéressant, lui aussi en provenance de nos amis de chez FOS. Il s’agit de FOSJsRoutingBundle. Son nom est assez évocateur, il permet d’exposer vos routes directement dans du code JavaScript. Cela signifie que vous serez en mesure de générer des URLs avec des paramètres donnés comme vous pouvez le faire avec le composant du routeur fourni dans le noyau Symfony2.

Voir plus sur FosJsRoutingBundle

Un breadcrumb propre et facile à utiliser whiteoctober/BreadcrumbsBundle

Terriblement simple à mettre en place, ce Bundle vous permettra très (très) simplement à créer vos fils d’Ariane dans vos pages. Un fil d’Ariane, c’est pas transcendant, mais il n’empêche qu’il s’agit d’un détail important pour vos utilisateurs ainsi que pour votre SEO.

Petite fonctionnalité, certes, mais Bundle propre, rapide à mettre en place, et très pratique.

Voir plus sur le BreadcrumbsBundle

La gestions des images : Avalanche Imagine Bundle

Ne me dites pas que vous n’utiliserez pas d’images dans votre projet. Une photo de profil, un thumbnail de couverture d’un article, une galerie photos… Autant de formats d’image que de lieux où seront affichées vos images.  Pas la peine d’afficher une image de 500px*500px si vous n’avez besoin que de l’afficher en 140px par 140px. Votre temps d’affichage vous en sera reconnaissant.

Avec Avalanche Imagine Bundle, définissez facilement directement dans le fichier de config vos formats et vos réglages : le Bundle s’occupe du reste. Avalanche Imagine créera pour vous les miniatures aux formats demandés.

Voir plus sur le AvalancheImagineBundle

Gestion des paginations : KnpPaginatorBundle

On ne rentrera pas dans les débats « pour ou contre une pagination », les SEO vous en seront reconnaissants. En revanche, quand il en y en a besoin, ce bundle est très pratique. En quelques lignes vous avez directement une pagination propre et efficace en place.

Le succès de votre projet ne dépendra pas de ce Bundle, on est d’accord. Mais il vous fera gagner pas mal de temps, vous pouvez me croire.

Voir plus sur le AvalancheImagineBundle

Pour avoir la main sur le SEO : SonataSeoBundle

Je ne suis pas particulièrement fan des Bundles Sonata, en revanche, il y en a un sur lequel je compte : c’est le Bundle de SEO. Très (très) simplement, nous avons la main sur les métas (robots, title, og:image….) de chaque page via leur controller respectif.

Il est très simple à mettre en place et répond a beaucoup de besoins SEO front office.

Voir plus sur le SonataSeoBundle

Pour compléter la liste

En plus de ces principaux, il en existe d’autres que j’utilise assez régulièrement. Le Knp Menu Bundle est très pratique pour mettre en place des menus simplement. Knp dispose d’une belle équipe et d’une communauté intéressante pour créer des Bundles fiables.

Pour faciliter la création de formulaire, j’utilise le GregwarFormBundle, ce bundle permet d’utiliser le « entity_id » dans les formulaires. Je ne m’étends pas trop, je vous laisserai lire la doc.

Les bundles que je n’utilise plus

Dans mes débuts sur Symfony2, j’ai souvent utilisé différents Bundles « clés en main ». En effet, Sonata par exemple, propose de nombreux Bundles alléchants comme SonataAdminBundle, SonataMediaBundle. Lors des premières utilisations, tout marche très bien, c’est assez magique même (même si leurs installations sont un peu la croix et la bannière si vous débutez sur Symfony2)… En revanche, lorsqu’il est nécessaire de rentrer dans de la personnalisation, ces Bundles deviennent trop usines à gaz…

Avec le temps, je me suis orienté vers du « a la mano » pour ces différents modules. L’administration est au final assez simple à faire à la main dans la quasi totalité des projets. Après tout, le CRUD disponible nativement sur Symfony2 est fait pour ça…

Quelques précautions tout de même

Ceux qui ont de l’expérience dans le développement de sites avec Symfony2 le savent, il est important de ne pas être dépendant de trop de bundles exterieurs. J’ai souvent eu des problèmes avec Sonata : une mise à jour un peu corsée et votre projet claque des erreurs 500 comme s’il en pleuvait

composer-update-explosion

Des bundles pas trop over-ingeneerés sont plutot conseillés pour savoir ce qu’on utilise. Mais ça, c’est comme tout, des libraries lights et très spécialisées, c’est souvent mieux (j’en profite pour vous conseiller l’autocomplete JS de mon collègue et ami Baptiste Donaux qui illustre bien cet aspect light et fonctionnel).

Quand on débute, il est très pratique de se reposer sur des bundles déjà fonctionnels. Analyser leur fonctionnement est aussi une bonne chose, mais on oublie trop souvent de fixer les versions dans le composer.json, et là…  c’est le drame.

meme-composer

Cette liste n’est pas fermée, chacun fait cuisine à sa propre sauce. Si vous aviez d’autres bundles plus utiles ou un autre avis sur ceux que je cite, n’hésitez pas à me donner votre avis dans les commentaires ! Je serai ravis de découvrir de nouveau bundles ainsi que des avis complémentaires !

A propos de François Deléglise

Attiré par le multimédia depuis de nombreuses années, j'ai découvert le référencement lors d'un stage de fin d'études en IUT GEii (Lyon, 2008), je suis passionné par le SEO depuis cette date. Je suis diplômé en développement Web (licence MIW de Gap, 2010) et en gestion de projet (Master2 Ingémédia, Toulon, 2012).

Depuis la fin de mes études, je travaille avec l'équipe de Wanadev (Lyon) en tant que chef de projet, développeur symfony2 et référenceur.

14 thoughts on “Les bundles incontournables pour un nouveau projet Symfony2

  1. Faihy Jocelyn says:

    Très bon article avec pratiquement le minimum pour bien débuer un projet Symfony2.
    Depuis Symfony 2.3 il faut aussi ajouter le bundle « jms/security-extra-bundle » pour utiliser les annotations de sécurité.

  2. Super article ! En effet, je recommande également ces bundles et essaye au maximum de limiter l’utilisation de bundles externes, source de conflit et de redondance !

    J’ai également arrêté d’utiliser les projets Sonata… surtout quand j’ai découvert le Sonata/JQueryBundle.

    Je recommendrai ton article aux personnes novices qui se mettent à Symfony2.

  3. Je me suis lancé dans l’aventure Symfony il y a 6 mois, et j’utilise FOSUserBundle, Stof Doctrine Extensions Bundle et FOSJsRoutingBundle dans tout mes projets :D

    Dans le même genre que FOSJsRoutingBundle, je conseillerai « willdurand/js-translation-bundle » qui permet d’exposer les traductions en js (et sur le coup ça permet de les centraliser)
    Ainsi que « hwi/oauth-bundle » pour faire des connexions/inscriptions via Facebook/Google très simplement…

    En tout cas super article, je vais tester ces autres bundles qui ont l’air bien sympa

  4. syndrael says:

    Même si je ne fais plus de Symfo c’est un article sympa pour ceux qui débutent.
    En tout cas l’update de Composer, JAMAIS !! toujours fournir les versions..
    Si on veut updater ça se fait sur un serveur autre avec une batterie de tests fonctionnels, techniques, unitaires etc..

  5. Shurik'N says:

    J’arrive un peu (carrément) après la bataille mais le jms/serializer-bundle est un incontournable pour exporter ses entités au format json (ou autre) tout en gérant des politiques d’export depuis les annotations de l’entité ;)

    Et heu… Excellent article au demeurant :)

  6. Christophe says:

    Intéressant !

    Même si je dois avouer que les bundle Sonata mon bien aidé, J’en arrive à la même conclusion : l’installation et la personnalisation sont un peu une peine (et plus le temps avance plus le passage a Symfony3 me fait peur)

    J’ai débuté l’été dernier sur symfony2 avec un besoin mixte (application + blog). J’en suis donc naturellement arrivé à utiliser Sonata, n’ayant vu aucune autre solution capable de rivaliser.

    Mon problème est que je n’ai pas envie de réinventer le blog alors que d’autre plateforme existent déjà, d’où ma question : avez vous déjà rencontré le besoin, et pour quelle solution avez-vous opté ?

    Merci à tous

    • Bonjour christophe,
      dans mes projets persos, comme sur mes projets pros, quelques petites choses ont changé depuis que j’ai écrit cet article.

      Tout d’abord, j’ai choisi de ne plus utiliser FOSUserBundle, je fais tout à la main (j’ai suivi les tutos de mon ami Baptiste : https://www.wanadev.fr/11-kit-de-survie-symfony2-gestion-utilisateur-sans-fosuserbundle/)

      J’ai remplacé ma gestion des images par LiipImagineBundle (plutôt qu’Avalanche). LiipImagine a l’avantage de générer les miniatures à la volée lors de l’affichage (contraiterement à Avalanche qui les crééait à l’upload. C’est un énorme avantage si on créer un nouveau format suite à une évolution). Il n’y a quasi aucune différence d’utilisation et d’installation.

      KNP Paginator et SonataSEO me servent encore tous les deux, à chaque projet. Je m’en suis servi même cette semaine sur un projet Symfony3. Simple d’installation et d’utilisation : ils remplissent leur mission.

      J’ai du mal avec les autres bundles de Sonata (User, Admin, Page…) que j’ai l’habitude de remplacer par du code fait maison… Je refais en effet régulièrement les mêmes codes pour ces fonctionnalités… Mais, je vais désormais assez vite, et c’est surtout (je retrouve) bien mieux customisable…. Ca demande un peu plus de temps, certes…

      Au plaisir de te répondre à nouveau, n’hésite pas à me ping sur twitter ou aller jeter un oeil ici : https://www.wanadev.fr/blog/, mes collegues et moi y publions des infos sur Symfony qui devrait t’intéresser.

      François.

  7. Christ Noel says:

    Bonjour à tous…
    j’ai découvert ce blog y’a pas longtemps, je vous félicite vraiment et loue vos efforts pour le temps passé à le mettre en place car il aide et profite beaucoup à tout le monde. Depuis un moment je bosse sur un projet web avec symfony 3.1 .
    Mon application web géra des films volumineux ce qui dans mes recherches m’a fait découvrir SonataMediaBundle qui lui intègre SonataAdminBundle et SonataUserBundle.
    Mais j’ai vraiment du mal avec « ça passe pas »
    vous n’avez pas un autre moyen autre que ces bundles à me prposer svp?

  8. Lionel K says:

    Il est excellent ton article. J’ai voulu utiliser SonataAdminBundle sur un projet, mais j’avoue c’est une vraie usine à gaz. Je pense que faire son admin est largement plus simple, plus pratique, si on veut avoir une admin sur mesure ^^. Je vais le tester ton SonataSEOBundle :)

    Lionel K.
    Responsable SEO & Webdeveloppeur
    http://www.permisapoints.fr

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">