Concernant tes slides, je voudrais bien voir quelles applications ont été testées et quel en est le contenu.
Le dernier post datant de 2014, je déterre ce topic.
Depuis le temps, pas mal de chose ont changé. À l’époque l’installeur de Symfony était extrêmement limité, tout jeune. Certes il n’utilise toujours pas HTTPS pour télécharger le package (pas comme composer par exemple) mais je ne vois pas où est le problème en soi…
une installation inconsistante : selon les versions, on propose Composer, ou une ligne curl pour télécharger un installeur Symfony (sans HTTPS !)
Maintenant l’installeur est la méthode recommandée et proposée par défaut sur le site officielle. Composer est toujours dispo mais n’a pas le même comportement.
un directory ultra-complexe : ça fout une grosse claque sur la découverte du framework, et même ensuite, c’est bien trop compliqué. Un projet Django classique a un, voire deux, à tout casser, niveaux d’arborescence, pourquoi autant de complications ?
app
, src
, web
, tu trouves que c’est beaucoup ? Sérieux ? Le dossier bin
est accessoire et est là juste pour accueilir les exécutables (pour éviter de tout cumuler à la racine, là où y’a tes fichiers pour composer, phpunit, npm, travis-ci, coveralls, README, et tous les CI que tu veux)., et le dossier vendor
on s’en tape puisqu’il n’est pas versionné et correspond aux composants installé via Composer.
Du coup les seuls dossiers que tu utiliseras sont vraiment app, src et web.
une doc oscillant de « pas géniale » à « franchement mauvaise »
C’est pas un argument, c’est un jugement, donc il est impossible de commenter ça. Quand t’as un bug sur Symfony, tu vas sur google, tu tapes ce dont t’as besoin, et 80% du temps tu tombes sur symfony.com, 15% sur stackoverflow, et 5% sur des blogs/sites de développeurs.
un nommage incompréhensible, qui redéfinit à la volée du vocabulaire (sérieusement, « la sécurité » ça signifie « les ACL et l’authentification » pour Symfony !)
Tout ça vient du composant “Security”. Tu l’aurais appelé comment ? “Authentication” ? Si tu avais vraiment lu la doc tu comprendrais que “Security” comprend effectivement “authentification” et “permission”. (et pas juste “acl” qui fait partie des permissions)
l’utilisation de syntaxes non-natives : YAML, Twig (qui est une syntaxe Python), les annotations, DQL… pour moi, un dev utilisant Symfony le fait typiquement quand il ne connaît pas d’autre langage : pourquoi lui en mettre tout de même dans les pattes ?
Comme dit plus haut, pour la config, tu peux utiliser YML, XML, PHP ou les annotations, y’a aucune “bonne” solution par rapport à d’autres. Twig est un moteur de template basé sur Jinja, c’est clair, mais où est le problème si Jinja est cool et qu’il a sa “version PHP” ?
Pour ce qui est de DQL c’est le principe d’un ORM : tu fais du DQL comme ça tu peux passer de MySQL à Sqlite ou PostgreSQL sans jamais toucher à ton code, tu changes juste la config : passer de pdo_mysql
à pdo_sqlite
c’est pas vraiment problématique, je pense.
Qui plus est, DQL reste dans l’idée d’un ORM et il est entity-centric, tu fais des requêtes “orientées objet”, vu que tu sélectionnes les propriétés de l’objet et pas les champs de la BDD.
Et sinon tu utilises le QueryBuilder et comme ça tu peux faire du vrai orienté objet en mode fluent.
une API orientée vers la complexité maximale, alors qu’elle devrait faciliter les tâches usuelles
L’API est complexe mais elle est hyper bien documentée, et très souvent tu n’as même pas besoin de lire la doc officielle, la doc des interfaces est souvent suffisante pour comprendre le fonctionnement des différentes classes.
les performances…
Symfony intègre un cache http pour la prod, ce qui est énorme déjà, et il intègre pas mal de composants facilitant l’ajout d’un proxy varnish (gestion d’ESI, annotations/méthodes pour le cache http, etc.).
Si les perfs sont nulles c’est souvent le développeur derrière qui a mal fait son travail.
J’en discutais pas plus tard que ce matin avec des collègues qui trouvaient que Doctrine était trop lourd (ouais, les metadata en mémoire avec APCu ou Memcache, c’est vrai que c’est lourd… -_- ), j’analyse du code, je vois 130 requêtes sql exécutées, j’optimise ça et j’obtiens 5 requêtes SQL, j’ai augmenté les perfs de 250% (plus de 400% de perfs en plus avec Redis, mais ils ont pas voulu que je l’intègre) environ après un bench.
Symfony lui-même, comme tout framework, est une base de travail.
Après, c’est aux développeurs de travailler correctement et d’optimiser le code.
Et si ça suffit pas, c’est aux devops/sysadmins de modifier la stack pour avoir un listing de blog qui se charge en 20ms…
Symfony c’est un moyen, rien d’autre.
Et s’il est si populaire c’est aussi parce que la politique derrière est très stricte.
Pense à Laravel : en 5.0 y’a une feature qui est imaginée, elle est ajoutée en 5.1, supprimée en 5.2, tu trouves ça propre ? Perso, j’aime pas, et rien que ça, ça me refroidit.
Symfony ajoute les features sur la version mineure ultérieure, et a une politique de respect total des BC (rétro-compatibilités), ce qui fait que si t’as une appli sous Symfony 2.5 et que t’installes Symfony 2.8, ton appli fonctionne toujours. Et ça sera encore plus flagrant depuis que SF3 est arrivé, parce que Symfony 2.8 a ajouté un gestionnaire de déprécations : tout ce qui est “déprécié et sera supprimé à la version X.0” est ajouté dans des logs en mode dev (et via le phpunit bridge, du coup tes tests unitaires / fonctionnels affichent aussi les déprécations) ce qui te permet déjà de préparer la migration de ton appli vers une version majeure supérieure.
Pour info, une version mineure (2.5, 2.6, 2.7) ajoute des features et des déprécations.
Une version majeure (3.0, 4.0) supprime toutes les déprécations annoncées à la version majeure précédente (sachant que toute déprécation est systématiquement annoncée). Et désormais les versions majeures n’ajoutent aucune feature, seules les versions mineures en ajoutent.
Et les versions patch (2.8.1, 2.8.2, 2.8.3) n’ont que des correctifs de bugs, ce qui te permet d’être sûr à 200% qu’elles sont rétro-compatibles.
Y’a pas de politique comme ça dans les autres frameworks PHP.
D’autres arguments à donner, à part le fait que “t’aimes pas” ?
Et puis accessoirement, Fabien Potencier, créateur de Symfony, a lui-même annoncé au hack.summit (y’a 1 ou 2 ans, je sais plus) que PHP est un mauvais langage, et c’est pour ça qu’il a toujours voulu que Symfony soit porteur de paroles de “bonnes pratiques” pour éviter aux devs PHP de faire de la merde.
Et c’est aussi pour ça qu’a été créé PHP-Fig, entre autres.