Comment mettre à jour et/ou compléter son projet Symfony 2.1 avec Composer
Cet article est la suite de mon précédent article sur l'installation d'un Projet Symfony 2.1 géré avec Git et Composer.Je vais aborder les 2 points classiques du cycle de vie d'un projet Symfony 2: mettre à jour la librairie et ajouter de nouveaux bundles à un projet existant. Je vous rappelle que cet article est écris pour les utilisateurs qui comme moi se basent sur des tags et non sur la branche dev-master de Symfony2.
1. Rappel sur Composer
Composer permet de gérer les dépendances de Symfony2.1. Il se base sur 2 fichiers composer.json et composer.lock.
Composer.json contient la liste des bundles que l'on veut installer et doit être modifié en conséquence.
Composer.lock est un fichier interne à Composer, que l'utilisateur ne doit pas modifier. Il contient la liste des bundles et leurs dépendances qui sont installés ainsi que la version utilisée pour chacun.
Les deux principales commandes de Composer sont 'install' qui installe les dépendance depuis le fichier .json si le fichier .lock n'existe pas et 'update' qui met à jour les versions des dépendances.
2. Ajout de nouveaux bundles
Pour illustrer, imaginons que je souhaite intégrer le bundle MopaBootstrapBundle à mon projet Symfony. Je dois éditer le fichier composer.json pour y ajouter le bundle.
{ ... "require": { "php": ">=5.3.3", "symfony/symfony": "2.1.*", "doctrine/orm": "2.2.*", "doctrine/doctrine-bundle": "dev-master", "twig/extensions": "dev-master", "symfony/assetic-bundle": "dev-master", "symfony/swiftmailer-bundle": "dev-master", "symfony/monolog-bundle": "dev-master", "sensio/distribution-bundle": "dev-master", "sensio/framework-extra-bundle": "dev-master", "sensio/generator-bundle": "dev-master", "jms/security-extra-bundle": "1.1.*", "jms/di-extra-bundle": "1.0.*", "propel/propel-bundle": "1.1.*", "willdurand/propel-eventdispatcher-behavior": "dev-master", "mopa/bootstrap-bundle": "dev-master" <--- cette ligne }, ... }
Ensuite il faut mettre à jour les dépendances du projet avec Composer. Attention, il faut absolument nommer le ou les bundles que l'on veut mettre à jour dans la commande sinon Composer mettra à jour toutes les dépendances en se basant sur la branche master et vous perdrez la stabilité donnée par les tags.
> php composer.phar update mopa/bootstrap-bundle
Si à l'issue de cette commande vous avez une erreur indiquant que le JSON n'est pas valide, vous avez surement laissé une virgule à la fin de la dernière ligne du require dans le fichier composer.json.
MAJ 10/02/2013
Composer a évolué, il est maintenant possible d'ajouter des bundles dans Symfony2 sans avoir à éditer le fichier composer.json grace à la fonction "require".
> php composer.phar require mopa/bootstrap-bundle
Pour chaque bundle ajouté, composer vous demandera la version que vous voulez installer.
N'oubliez pas d'ajouter le bundle au fichier app/AppKernel.php.
3.Mettre à jour les sources de Symfony
La mise à jour de Symfony est je trouve vraiment pas intuitive. Tel qu'est fait le fichier composer.json, il est impossible de spécifier un tag, on ne peut mettre que "2.1.*" comme version ce qui pointent obligatoirement sur la branche dev-master. J'espère que la version finale de Symfony 2.1 corrigera ce problème. En attendant pour faire évoluer la librairie de tag en tag, je n'ai trouvé qu'une seule solution.
Mon projet est atuellement basé sur le tag 2.1Beta3 et je souhaite mettre à jour vers 2.1RC2. La seule procédure que j'ai trouvé consiste à remplacer le fichier composer.lock par celui du tag que l'on souhaite puis utiliser l'update de composer pour ajouter les bundles supplémentaire et installer les dépendances.
Je commence par remplacer mon fichier composer.lock par celui du tag qui m'interesse.
> rm composer.lock > wget https://raw.github.com/symfony/symfony-standard/v2.1.0-RC2/composer.lock
L'installation de la nouvelle version se fait en une ligne de commande avec l'option "install" pour un projet qui n'utilise pas de bundle complémentaire ou avec l'option "update" pour les projets avec des bundles complémentaires.
#sans bundle complémentaire: > php composer.phar install #avec des bundles complémentaires: > php composer.phar update propel/propel-bundle willdurand/propel-eventdispatcher-behavior mopa/bootstrap-bundle
Symfony est maintenant à jour, il ne reste plus qu'à commiter le fichier composer.lock et à prévenir les personnes qui travaillent sur le projet de faire une maj de leur dépendance avec l'option install de composer.phar.
MISE A JOUR 11/09/2012: Je viens de mettre à jour mon projet de la version beta vers Symfony 2.1.1. J'ai du aussi télécharger le fichier composer.json car trop différent par rapport au version beta. Il ne fat pas oublier d'ajouter la liste des dépendances ajoutées à la version standard du framework. Pensez aussi à jeter un oeil sur le changelog.
Il y a 4 commentaires.
Ecrit par Ulrich le 3 déc. 2012
Ecrit par Ulrich le 3 déc. 2012
Ecrit par Bruno le 1 déc. 2012
Ecrit par seb le 1 déc. 2012
Ajouter un commentaire