Symfony 2.8 et Symfony 3.0 sont sortis en même temps. SensioLabs a donné une explication avec leur nouvelle procédure « Symfony Release Process » :
A new Symfony major version […] it’s released at the same time of the last minor version of the previous major version.
La nouvelle version majeure élimine toutes les parties dépréciées et propose des changements d’architecture, de dépendances, etc. tout en conservant toutes les fonctionnalités de la dernière version mineur précédente.
Et je conseille de vous mettre aux versions 3.x dès à présent, car elles intègrent beaucoup de changements.
Arborescence
symfony/symfony-standard/3.4
app/
autoload.php
bin/
console
src/
AppBundle/
Controller/
AppBundle.php
tests/
AppBundle/
Controller/
*Test.php
var/
cache/ #.gitkeep
logs/ #.gitkeep
sessions/ #.gitkeep
bootstrap.php.cache #.gitignore
vendor/ #.gitignore
bin/
phpunit
composer.
phpunit.xml.dist
Outch ! Ça va changer nos habitudes ;)
Binaires
Le fichier app/console
qui devient bin/console
, ça va être dur de perdre l’habitude mais ça me semble bien mieux pour la compréhension du projet.
Du coup, tous les binaires de Composer ne sont plus dans le dossier bin/
mais dans vendor/bin/
. Ce qui implique que le dossier bin/
n’est plus ignoré par Git, voir la PR #772.
Séparation des données
Le dossier var/
fait son apparition ! Il va contenir les dossiers de caches var/cache/
, de logs var/logs/
et de sessions au besoin var/sessions/
.
Les données ne sont plus stockées dans le dossier app/
ce qui est plus logique.
Par contre ils ont rajoutés des fichiers Git Keep partout, je vous raconte pas la tronche du fichier .gitignore ;)
Applicatif
AppKernel
Des nouvelles méthodes ont été incluses dans le fichier app/AppKernel.php
: getRootDir
, getCacheDir
et getLogDir
. Cela permet de se conformer à la nouvelle arborescence des dossiers, car le Kernel n’a pas été changé.
Bootstrap
Le fichier bootstrap (var/bootstrap.php.cache
) n’est plus généré dans le dossier app/
, mais dans le dossier var/
. Il est uniquement utilisé par le front controller de production : web/app.php
.
A propos de l’utilité du fichier bootstrap :
To ensure optimal flexibility and code reuse, Symfony applications leverage a variety of classes and 3rd party components. But loading all of these classes from separate files on each request can result in some overhead. To reduce this overhead, the Symfony Standard Edition provides a script to generate a so-called bootstrap file, consisting of multiple classes definitions in a single file. By including this file (which contains a copy of many of the core classes), Symfony no longer needs to include any of the source files containing those classes. This will reduce disc IO quite a bit. If you’re using the Symfony Standard Edition, the bootstrap file is automatically rebuilt after updating the vendor libraries via the composer install command.
Source
Syntaxe
Il faut dorénavant respecter les doubles quotes dans les fichiers de configurations YAML.
L’utilisation de pattern est remplacée par path pour définir le chemin de l’URL dans les fichiers de configuration routing.yml.
Dépendances
On passe à la version PHP >= 5.5.9, c’est déjà mieux !
AsseticBundle est tout simplement supprimé, voir la PR #860.
Tests unitaires
Les tests sont déplacés dans le dossier tests/
à la racine, au lieu de chaque dossier */Tests
dans chaque bundle. Là encore, c’est vraiment plus clair !
Le fichier phpunit.xml.dist
est déplacé à la racine. Personnellement je l’aurai mis dans le dossier tests/
mais je pense que c’est pour faciliter l’écriture des chemins relatifs dans son contenu.
PHPunit utilise le fichier app/autoload.php
dorénavant, mais il faut définir la variable KERNEL_DIR pour que la class AppKernel
soit trouvée (app/AppKernel.php
).