Symfony2 en action, 1 mois pour tout changer (part 2)

Dans l'article précédent sur la mise en place de Symfony2 et mon choix de version. Aujourd'hui, une nouvelle étape dans le développement du site: Le Bundle. L'élement de base de tout projet Symfony2, il n'a pas d'équivalent dans Symfony 1 mais s'approche de l'architecture et de l'utilisation théorique des Plugins.

 

J'ai lu tout ce que j'ai trouvé sur le sujet et je dois avouer que je reste dans le flou le plus total sur "où mettre quel code dans quel bundle". Ma vision du Bundle n'est autre qu'un dossier avec potentiellement un bordel immonde à l'intérieur. Quand je voie ce que mes collègues arrivent à faire avec sf1, j'imagine ce qu'ils vont pouvoir faire avec sf2, beurk.

 

Si je fais un petit résumé de ce que j'ai lu, dans un bundle on peut y mettre: des fichiers de config, des Entity de Doctrine, des Controllers, des Exceptions, les Templates qui vont avec les actions des controllers, mais aussi les tests, la doc, les assets (js, css, images...) et je suis sûr que j'en oublie. En fait il est plus simple de faire la liste de ce qu'on ne doit pas y trouver d'après la page des Bonnes pratiques: les librairies externes qu'elles soient en PHP, javascript ou autre. Un question me traverse l'esprit: "où est ce que je vais mettre les sources d'ExtJs?".
Un bundle doit représenter une fonctionnalité: un blog, un forum..... Ouah, c'est énorme tout un forum ou tout un blog dans un bundle, en gros pour 80% des projets Symfony2 il ne devrait y avoir qu'un seul Bundle et une dizaine voir plus de bundles récupérés sur github pour les fans des codes déjà tout fait.

 

Personnellement, j'aime que les choses soient carrés et je ne veux pas passer mon temps à chercher les classes, autant mieux ne pas faire de Symfony dans ce cas.
J'ai décidé de créer 3 Bundles qui seront tous sous le même namespace.

 

1. FrontBundle

Dans le front j'y mettrai tout ce qui touche au front du site Live Pics: controller, views, formulaire, config, asset.......
Sur sf1 j'aurai surement créé une poignée de modules, ce Bundle les regroupera tous.

 

2. AdminBundle

Je n'ai jamais aimée avoir 2 applications dans Sf1 en particulier à cause de la configuration qui ne peut pas être partagé,  mais ça m'a toujours déranger d'avoir les modules du front et de l'admin au même endroit. Cette fois le système des bundles va me permettre d'avoir cette séparation tout en gardant une configuration adapté a chaque spécificité entre le front et le back et de placer les éléments communs dans le /app/config du projet.

 

3. LibBundle

On dit toujours "Jamais deux sans trois". Ce n'est pas pour respecter cette règle que j'ai décidé de faire un troisième bundle. Je trouve juste insensé de placer les Entity doctrine dans le bundle Front et de les appeler dans le bundle Admin. Idem pour toutes les classes "métier" que j'aurai à créer. Un bundle spécifique me semble donc adapter et je pense dans le cadre d'un travail en équipe structurer un minimum les choses.

 

Reste le problème des librairies externes, elles devraient en théorie trouver leur place dans /vendor; on verra le moment voulu.
Avec cet article et ces choix je suis conscient de ne plus respecter les préconisations de Sensio, je vous donne rendez vous dans un mois pour faire le point et voir si je me suis engouffré dans une galère ou non.
 

Il n'y aucun commentaire