Aller au contenu

Symfony, le casse-tête Français

Symfony, le casse-tête Français

C’est le premier article que je fais sur Symfony, et ça sera surement le dernier.

Ca fait maintenant 4 ans que je travaille sous Zend 1, et je commençais à m’isoler du reste du monde. Puis un nouveau projet tombe en Janvier 2016, parfait pour se sortir la tête du guidon. J’ai donc eu envie de voir ce qui se faisait aujourd’hui au niveau des Framework PHP, en espérant tomber sur LE Framework qui me ferait quitter Zend. Pour cela, j’ai misé sur 3 points simples, que l’élu devra accomplir :

  • Ecrire moins de code, et être le plus simple et lisible possible
  • Avoir une App performante (rapide)
  • Maintenir/Evoluer mon App facilement

Je me lance dans la jungle de notre cher ami Google et je tombe sur le fameux Symfony. Au vue des innombrables articles écris dessus, des tutos réalisés, il avait l’air d’être parfait pour moi. Et en plus, il est Français ! Woohoo ! Mais ce dernier point aurait dû me mettre la puce à l’oreille…!

Ce nouveau projet, simple sur le papier, consiste à coder un CMS évolué. Il semble parfait pour apprendre à maitriser la bête Française. OpenClassRooms a écrit un magnifique tuto sur SF2, qui a répondu à 80% de mes besoin pour mon projet. MVC, Dépendances, Bundles, Formulaire, Validation, Templating… Tout est bien fait. Bon, niveau code ça reste un peu lourd, et niveau performances c’est pas extra en DEV. Mais je verrai ça plus tard, pour le moment j’apprends. J’arrive à sortir le projet au bout de 45 jours. OK, sous Zend j’aurai mis 3 fois moins de temps, mais je mets ça sur le coup de l’apprentissage.

Le bolide est démarré, il est temps pour moi de faire gronder le moteur et de voir ce qu’il a dans le ventre. Et là, je cale. Impossible d’en faire davantage.

Pourquoi? Parce-que dans Symfony, vous ne codez pas. Vous utilisez des dépendances, des Bundles, que les autres ont codé. Et si vous voulez ajouter quelque chose, il faut tout refaire. Mais si vous voulez recoder, un bundle ou autre, il faut le faire comme Symfony l’a décidé.

Je prends l’exemple du Bundle le plus connu et surement le plus utilisé : FOSUserBundle.
Pour ceux qui ne sont pas dans le monde de Symfony, un « Bundle » est simplement un « lot de fonctionnalités » qu’on peut intégrer dans notre projet. Il ne s’agit pas d’une simple classe ici, mais bien de greffer une sorte de micro-projet, développé par quelqu’un d’autre, dans  le vôtre.
FOSUserBundle est le Bundle qui s’occupe de gérer les utilisateurs (inscription, connexion, déconnexion, récupération de mot de passe…). Vous l’ajoutez à votre projet, configurez le bundle via un fichier de config, et c’est fini. C’est top, à condition de ne pas en vouloir plus, ce qui n’était pas mon cas.
Il est arrivé un stade où dans mon projet j’avais besoin de faire plusieurs types d’utilisateurs, qui auront un accès différent à l’application. Je ne veux pas qu’un simple rôle sur un membre, qui aura le droit ou non d’accéder à un contenu, je veux aller beaucoup plus loin. Sauf que c’est FOSUserBundle qui gère l’authentification, et qu’il ne gère pas ce cas là. La seule solution est donc de tout recoder. Quel avantage ai-je eu à utiliser FOSUserBundle ici? Aucun, hormis perdre du temps à le comprendre.

Et ce n’est qu’un exemple parmi tant d’autres.

Résultat, je me retrouve dans un Framework qui bloque ma manière de développer, qui intègre des milliers de lignes de codes non utilisées, tout ça pour avoir une app en DEV qui met 10sec à faire 3 requêtes. Génial.

Aujourd’hui je décide de limiter la casser et de rayer SF2 de mes futurs projets, car malgré les dizaines de cookbook suivis, de tutos lus, des messages posté sur les forums, je suis toujours incapable de coder ce que je veux.

Si vous avez d’autres Framework à me conseiller, (ou langages, genre RubyOnRails?) je vous écoute avec grand plaisir 🙂