Anticiper la migration entre Symfony 2 et 3 en activant la nouvelle structure de répertoires

Symfony, le framework PHP made in France a le vent en poupe et amène dans son sillage le PHP à l’ère industrielle (bon, c’est vrai que Zend l’avait déja aidé à traverser). Sa version 2.6 est sortie depuis quelques semaines mais papa Sensiolabs a semble-t-il déjà bien entamé le travail sur la version 3…

Il y a toutes les chances que les projets v2 soient migrables assez facilement sur v3, mais que la structure des répertoires systèmes changent un peu, car pour l’instant ça reste assez mal structuré : par exemple il y a un peu trop tout et n’importe quoi dans /app/, du cache, des logs, la console, et l’emplacement des fichiers de config globaux ne suit pas la norme des bundles.

Lors d’une release  de Symfony 2.4 ou 2.5, l’assistant vous demandait si vous vouliez utiliser la « nouvelle structure de répertoire v3 » lors de la création d’un nouveau projet. Ça changeait pas mal de choses sur la structure, sans toutefois être documenté ; c’est sûrement pour ne pas embrouiller les esprits que Sensiolabs a vite retiré cette option. C’est dommage, car c’est la structure prévue pour le futur de Symfony.

Mais pourtant tu peux continuer à utiliser cette option en définissant la variable d’environnement SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true avant de lancer l’assistant de création de projet.

Le plus simple pour le faire : préfixer la commande composer de création de projet par cette variable, dans la même ligne de commande :

SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true composer create-project symfony/framework-standard-edition MySf3ProjectPath/

A l’usage, ça ne change pas grand chose. Principalement ceci :

  • les répertoires /cache/ et /logs/ seront dans un dossier /var/ au lieu de /app/ ; pense donc à adapter les permissions d’écriture sur le serveur – au lieu de app/cache et app/logs, c’est maintenant /var
  • la console n’est plus dans /app/ mais dans /bin/ (déja utilisé pour stocker les exécutables de le projet Symfony-CMF)

Ça te rappelle pas une arborescence Linux ?

Le seul changement au niveau de la console sera donc l’emplacement de la console elle-même ; par exemple au lieu de taper :

php app/console cache:clear

Il faudra taper ceci :

php bin/console cache:clear

Les commandes prendront bien en compte la nouvelle structure, et ainsi cache:clear ira supprimer les fichiers dans /var/cache/ plutôt qu’/app/cache/. Même le fichier .gitignore à été réajusté.

Moi , j’accroche beaucoup plus à cette arborescence. Je l’utilise déjà depuis quelques mois et je n’ai pas encore rencontré de bugs liés à ça. Et il y a fort à parier que si vos projets utilisent déjà la structure de Symfony 3, ça n’en sera que plus transparent pour les migrations entre les versions 2 et 3. Et même si c’est pas le cas, vous aurez un projet avec une structure moins brouillon ! Dommage que ça n’ait pas mal de marcher pour le projet CMF par contre.

En plus de ça, au niveau des permissions d’accès en écriture sur le serveur et du profilage du shell, ça à un réel intérêt.

Petit théorie personnelle sur Symfony 3 : il y aura surement d’autres binaires dans le futur, peut-être carrément celles de PHPCR-ODM introduites dans Symfony CMF, sinon il n’auraient pas créer un dossier /bin/ juste pour la console si ?

3 réflexions sur « Anticiper la migration entre Symfony 2 et 3 en activant la nouvelle structure de répertoires »

  1. Voilà donc un bon article, bien passionnant. J’ai beaucoup aimé et n’hésiterai pas à le recommander, c’est pas mal du tout ! Elsa Mondriet

  2. Excellent billet. Mais c’est assez dommage car je suis déjà sous Symfony 3. En tout cas merci pour votre partage.

Un commentaire ?