Premiers retours sur Symfony

Sat 09 August 2014 | Damien Symfony

Je suis en train de finaliser un premier projet sous Symfony (après un an de développement) et je souhaite faire part de mon expèrience et de mon premier ressentis.

Symfony, qu’est-ce donc ?

Symfony est un framework PHP visant à fournir tous les outils de base au développement d’applications et de sites web. Celà passe par une gestion des URLs (routes), la gestion de la sécurité (restrictions d’accès, authentification), gestion des données (ORM).

Le tout est relativement simple à installer et à mettre en pratique moyennant quelques heures passées sur de bon tutoriaux (comme celui d’OpenClassrooms par exemple).

Les pours

La gestion automatique de la base de données est super agréable (j’ai jamais aimé créer les tables et écrire les requêtes d’ajout / modification / suppression) et le fait d’avoir juste à déclarer une classe pour qu’une bonne partie du travail soit faite automatiquement est un véritable point positif.

De plus le découpage du code (code dans l’entity, dans le controller et dans le repository si besoin) permet d’avoir des blocks de codes simples, bien découpés et faciles à retrouver.

Symfony intégre également un système d’événements permettant d’executer du code quand des objets sont chargés depuis l’ORM par exemple.

Les contres

Symfony est plutôt gros et sa prise en main prend du temps. Si votre projet est simple et linéaire, vous ne devriez pas rencontrer trop de soucis. Mais si comme moi vous devez mettre en place une application complexe avec des données qui se recoupent et qui se chargent de manière conditionnel, celà risque d’être un petit peut plus compliqué.

Les deux gros points noirs lors de mon premier projets ont été :

  • Impossible de faire ce que l’on souhaite n’importe où (non, vous n’avez pas accès à tout suivant que vous êtes dans le code d’une entitée, dans un controleur ou dans un repository, et croyez-moi des fois ça fache !).
  • L’ORM pet créer des références cycliques dans les tables via les clefs étrangères (et là, plus possible de supprimer les données - heureusement, un modification apprpriée dans la description des champs corrige le tout).

Mon avis

Même si je me suis pris la tête plus d’une fois avec l’outil, il est indéniable qu’il m’a permis de gagner beaucoup de temps au niveau du développement (de plus l’utilisation de PhpStorm m’a également permis de gagner du temps avec Symfony grace à ses outils intégrant le support de Symfony).

De plus, chose important pour moi, l’outil développé pour le client peux être repris par n’importe quel développeur connaissant Symfony (rien à voir avec quelque chose qui aurait été écrit from scratch). Pour la pérénité du projet, c’est important. C’est bon pour le client, mais c’est aussi bon pour mon entreprise car l’application pourras également être reprise par n’importe qui dans l’équipe avec un minimum d’effort (on ne sait jamais ce quei put se passer et il faut assurer la continuité du service).

J’aimerais maintenant essayer Laravel (qui me semble plus souple) et Django pour voir ce qui se fait ailleurs avant de me fixer sur un framework (avec par contre un bémol sur Django car basé sur Python et que je suis le seul python addict de l’entreprise).

Un an et demi après

Edit du 13 Mars 2016

Ça fait maintenant 10 mois que j’ai intégré une nouvelle entreprise dans laquelle j’ai la chance de travailler quasi exclusivement avec Symfony.

Autant vous dire que ma vision a quelque peut changer :

  • Non l’outil que j’ai écrit ne peut pas être repris par le premier quidam venus (j’ai fait des choses compliquées car ignorant les possibilitées de l’outil)
  • L’ORM fait ce qu’on lui demande, si j’ai eu des soucis c’est tout simplement parceque je ne faisait pas les choses correctement.
  • Ne pas pouvoir faire ce que l’on souhaite est plus ou moins vrai. C’est juste que j’aurais du déclarer plus de services et utiliser l’injection de dépendances à bon escient.

Au final, tous les soucis que j’ai pu avoir sotn dûs à un manque de connaissance/de formation sur l’outil.

J’avais demandé à avoir une formation avant de démarrer le projet, mais elle ne m’avais pas été accordée. Ayant du gérer une autoformation et une deadline de projet totalement irréaliste (le temps de développement avait été sous-évalué, même si j’avais eu la connaissance technique que j’ai maintenant je n’aurais jamais pus respecter les délais) j’ai fait des choix plus que contestables et j’ai plus essayé de contourner le framework pour arrive rà mes fins qu’autre chose.

Symfony est un très bon framework, d’autant plus que depuis j’ai testé Laravel et que j’ai été très déçus par lui (j’avais l’impression de faire du CodeIgniter à peine amélioré).

Cependant, il vaut mieux avoir eu une formation (officielle ou interne si vous en avez la possibilité) avant de se lancer dans de trop gros projets.