Découverte de Symfony

Ca fait un petit bout de temps déjà que je voulais me mettre à symfony. Voici mes impressions.

Installation

En fait, ce n'est pas la première fois que je teste symfony. J'avais déjà téléchargé le projet de démonstration. Mais j'étais pressé, je n'avais pas lu la doc et j'ai tout cassé.

Cette fois, je lis l'énorme doc de 19 grosses pages qui est dans les sources. Et c'est tout de suite plus facile, parce que ça explique comment sont rangés les dossiers et les fichiers (avant j'essayais de deviner).

Une fois qu'on a les définitions des project, application, module et action, ça va beaucoup mieux.

Je n'ai pas utilisé le projet de démonstration cette fois. J'ai simplement suivi la doc et créé un projet depuis zéro. Et ça marche très bien.

Structure et configuration

La chose qui m'a frappé au début, c'est les dossiers. Il y a les mêmes arborescences un peu partout. La raison est simple: symfony se base sur une configuration en cascade. On applique une configuration générale et on peut la modifier localement pour un morceau du projet. On n'est pas obligé, mais c'est possible.

Les helpers et les filtres

Je vous épargne les détails de mon avancée dans la création du projet, je ne veux pas faire de billet, un didacticiel.

Je connaissais les Helpers, dans d'autres framework, ce sont des fonctions utiles qui servent à l'affichage, comme par exemple pour créer rapidement un <select>. Il y en a dans symfony, mais je suis tombé sur les filtres en essayant de comprendre comment des CSS peuvent être insérées ma page alors que je ne l'ai dit nulle part dans mon layout.

Un filtre peut modifier ce que va envoyer symfony à l'utilisateur. C'est comme ça que par défaut, les javascripts et CSS sont insérés en faisant un simple rechercher/remplacer sur </head>. symfony applique le pattern décorateur pour les filtres.

On peut utiliser un filtre pour ajouter le code de google analytic par exemple, sans toucher au layout du site.

Partial, component et slot

C'est à ce moment que j'ai dit woua.

Je n'ai pas encore vu de framework (faut dire que j'en ai pas vu beaucoup) qui allait aussi loin sur les différentes façon de factoriser un affichage. Je vous cite la doc en français:

Si la logique est limitée, vous inclurez simplement un gabarit qui accèdera aux paramètres que vous lui passerez. Vous utiliserez un partial.

Si la logique est plus lourde (vous avez par exemple besoin d'accèder au modèle de données et/ou de modifier le contenu selon la session), séparer la présentation de la logique sera préférable. Vous utiliserez dans ce cas un component.

Si l'objectif du gabarit est de remplacer une partie spécifique de la page, pour laquelle il peut exister un contenu par défaut, vous utiliserez un slot.

Et encore, je ne parle pas des component slot ! Une sorte de combo digne d'un street fighter :)

Conclusion

Il faut lire la documentation, c'est long et verbeux, mais ça aide.

Il y a tout un tas de mécanismes, de fallback, de cascades, de décorations, de cache etc. C'est marqué que les developpeurs débutant peuvent faire du symfony. Je trouve ça assez avancé quand même. Dès le départ on nous parle de MVC et qu'il faut lancer des commandes pour créer son projet ... gné ? Le gars qui joue avec son dreamweaver doit être un peu perdu.

Même en fournissant un projet tout configuré. Le problème arrive dès qu'il faut faire des modifs, et là il faut de tout façon lire la doc pour savoir où il faut modifier, sous réserve de la comprendre. On n'entre pas dans l'orienté objet si facilement.

Mais bon, j'appécie pleinement le framework. C'est un beau travail. Et je commence un projet bidon pour mettre en pratique, parce qu'il n'y a rien de mieux que la pratique ! :)

Vous en saurez plus si je trouve quelque chose d'intéressant pendant la construction du projet.

Commentaires

2. Le dimanche, janvier 20 2008, 19:00 par PapyGeek

Même impression que toi. Même si Symfony est simple à utiliser, la première approche n'est pas forcément simple (ou rapide) : il y a beaucoup de conventions, structures et autres principes à connaitre.

3. Le dimanche, janvier 20 2008, 20:13 par olivier

Merci pour cette mini intro! Auriez-vous des ressources à me donner pour intégrer la notion de POO en PHP? Je n'arrête pas de me dire que c'est génial, mais j'ai encore du mal à cerner exactement le principe.

Merci beaucoup!

4. Le dimanche, janvier 20 2008, 20:20 par neolao

Perso, j'ai appris la POO en ... faisant des erreurs.

J'ai simplement fait plein de projets (perso ou pro) et j'ai pu voir où c'était chiant à modifier. Parce qu'un projet n'est jamais fini, on le modifie tout le temps.

Et à force de pratique et de lectures, j'en suis arrivé à là.

5. Le dimanche, janvier 20 2008, 20:30 par NiKo

Ça me fait plaisir :-)

Entièrement d'accord avec ta conclusion, Symfony est tout sauf un framework pour débutant. D'ailleurs je ne suis pas sûr que ce soit le discours de ses concepteurs, je n'en vois pas trace sur le site.

Symfony est un framework surpuissant mais qui s'adresse quand même à des gens ayant un background certain dans la conception de sites internet.

Par contre, que'est ce qu'on progresse à la lecture du code du coeur ! ^^

6. Le dimanche, janvier 20 2008, 20:43 par neolao

alors alors ... j'ai pu trouver cette phrase dans la première page de la doc.

Whether you are a PHP 5 expert or a newcomer to web application programming, you will be able to use symfony.

Surtout que c'est un peu spécial le web application. C'est pas comme quand j'fais du Flash.

7. Le lundi, janvier 21 2008, 09:37 par Romz

Bonjour et merci pour cette overview.

Peut-on m'expliquer l'éventuelle différence et avantages/inconvénients face au zend framework. J'ai un choix à faire par rapport à mon apprentissage et j'aimerais savoir vers lequel me diriger ;-)

8. Le lundi, janvier 21 2008, 10:40 par neolao

J'ai commencé avec Zend Framework justement.

L'avantage de symfony, c'est qu'il te propose déjà une arborescence de dossier/fichier, alors qu'avec Zend, tu dois ranger toi même, au risque de te tromper.

L'inconvénient, c'est que t'as l'impression de ne rien contrôler. Et ça pour un apprentissage, c'est peut-être pas la bonne solution.

Ceux qui apprécient pleinement les framework, ce sont ceux qui ont déjà mis les mains dans le camboui.

9. Le lundi, janvier 21 2008, 17:26 par technotris

héhé, moi chui sur cakePHP (je pense plus facile a prendre en main au début, surtout avec l'autogeneration 'bake'), mais plus j'essaye des choses, plus je vois des problemes :(
J'ai regarder un peu la structure de symfony, et j'aime pas trop comment ils ont nommés les choses :o
Et j'ai vu qu'ils utilisaient un ORM, qui devrait etre remplacé dans certains cas.

10. Le mercredi, mars 19 2008, 20:06 par James

au passage, bientot la sortie de symfony 1.1 qui change pas mal de choses surtout au niveau des formulaires (a lire les tutos sur le blog de niko prendre un café)
Et justement au niveau de l'ORM Propel, qui sors de la structure de base de symfony pour devenir un plugin, donc au même niveau que son "concurrent" Doctrine