Nous allons voir comment se servir du bundle de migrations fourni par Doctrine avec Symfony et Composer. Placez vous dans le répertoire qui servira de base à cet exercice. Pour ma part j’ai choisi la localisation suivante :
mkdir $HOME/migrations && cd $HOME/migrations
Nous allons tout d’abord installer Composer dans ce répertoire. Bien évidemment, il vous faudra disposer de curl. Si vous ne l’avez pas installé, faites-le de suite :
sudo apt-get install curl
Ensuite installez Composer :
curl -sS https://getcomposer.org/installer | php #!/usr/bin/env php All settings correct for using Composer Downloading... Composer successfully installed to: /home/sebastien.ferrandez/migrations/composer.phar Use it: php composer.phar
Maintenant que nous avons Composer installé, nous allons faire une installation de Symfony via cet outil :
php composer.phar create-project symfony/framework-standard-edition Symfony/ 2.2.1
Des bundles sont déployés sur votre machine (citons Doctrine, Swiftmailer, Monolog, Assetic) et vous les trouverez en faisant :
ls -l Symfony/vendor/
Vous vous en doutez, tous ne nous seront pas utiles. Pour nettoyer votre install et garder ce que vous voulez, n’hésitez pas à mettre à jour votre fichier composer.json.
Prenons quelques secondes pour regarder ce composer.json généré par notre create-project :
cat Symfony/composer.json
Attardons nous sur la partie « require » de notre objet JSON :
"require": { "php": ">=5.3.3", "symfony/symfony": "2.2.*", "doctrine/orm": "~2.2,>=2.2.3", "doctrine/doctrine-bundle": "1.2.*", "twig/extensions": "1.0.*", "symfony/assetic-bundle": "2.1.*", "symfony/swiftmailer-bundle": "2.2.*", "symfony/monolog-bundle": "2.2.*", "sensio/distribution-bundle": "2.2.*", "sensio/framework-extra-bundle": "2.2.*", "sensio/generator-bundle": "2.2.*", "jms/security-extra-bundle": "1.4.*", "jms/di-extra-bundle": "1.3.*" }
Vous y retrouvez tous les bundles dont vous avez vu défiler le nom à l’installation, c’est plutôt rassurant !
L’heure est maintenant venue d’installer le bundle de migrations Doctrine. Vous êtes toujours à la racine de votre projet et vous exécutez :
php composer.phar require doctrine/doctrine-migrations-bundle dev-master -d Symfony composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) - Installing doctrine/migrations (v1.0-ALPHA1) Downloading: 100% - Installing doctrine/doctrine-migrations-bundle (dev-master 99c0192) Cloning 99c0192804134a8c1d0588777bd98bdbc2dbb554
Vous refaites un :
cat Symfony/composer.json
Pour vérifier que votre fichier composer.json a été mis à jour. Normalement, la partie require devrait maintenant ressembler à ça :
"require": { "php": ">=5.3.3", "symfony/symfony": "2.2.*", "doctrine/orm": "~2.2,>=2.2.3", "doctrine/doctrine-bundle": "1.2.*", "twig/extensions": "1.0.*", "symfony/assetic-bundle": "2.1.*", "symfony/swiftmailer-bundle": "2.2.*", "symfony/monolog-bundle": "2.2.*", "sensio/distribution-bundle": "2.2.*", "sensio/framework-extra-bundle": "2.2.*", "sensio/generator-bundle": "2.2.*", "jms/security-extra-bundle": "1.4.*", "jms/di-extra-bundle": "1.3.*", "doctrine/doctrine-migrations-bundle": "dev-master" },
Si c’est le cas, alors vous avez installé le bundle avec succès ! Il nous faut cependant faire quelques « réglages »; commençons par ajouter notre bundle fraîchement installé dans le fichier AppKernel.php
vi Symfony/app/AppKernel.php
Nous y rajoutons la ligne suivante (vous pouvez laisser la dernière virgule car il s’agit d’une dangling comma) :
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
Ensuite il nous faut évidemment renseigner nos paramètres d’accès à la base de données afin que Doctrine puisse s’y connecter et donc faire :
vi Symfony/app/config/parameters.yml
Vous renseignerez dans ce fichier les paramètres de votre base de données (le driver utilisé – dans le doute laissez PDO -, l’IP de la machine cible, votre nom d’utilisateur et enfin le mot de passe).Dans la partie database, mettez le nom de votre base de données: assurez-vous bien entendu qu’elle existe ! La mienne s’appelle « exercice », je la crée sans plus attendre en ligne de commande (mon serveur MySQL est sur ma machine locale, je ne précise donc pas -h localhost) :
mysql -u root -p -e 'create database exercice'
Pour m’assurer que tout est en place avant de m’amuser avec les migrations, je lance une dernière commande :
sebastien.ferrandez@sebastien:~/migrations$ Symfony/app/console doctrine:migrations:status == Configuration >> Name: Application Migrations >> Database Driver: pdo_mysql >> Database Name: exercice >> Configuration Source: manually configured >> Version Table Name: migration_versions >> Migrations Namespace: Application\Migrations >> Migrations Directory: /home/sebastien.ferrandez/migrations/Symfony/app/DoctrineMigrations >> Current Version: 0 >> Latest Version: 0 >> Executed Migrations: 0 >> Executed Unavailable Migrations: 0 >> Available Migrations: 0 >> New Migrations: 0
Tout semble fonctionner ! Comme je suis d’un naturel curieux et que je ne crois que ce que je vois, je regarde si des choses se sont passées dans ma base de données :
sebastien.ferrandez@sebastien:~/migrations$ mysql -u root -p -e 'use exercice; show tables' Enter password: +--------------------+ | Tables_in_exercice | +--------------------+ | migration_versions | +--------------------+
Et la réponse est OUI ! Une nouvelle table a été créée pour gérer les versions de mes migrations ! Tout est maintenant réuni pour s’adonner sans retenue aux joies de la migration avec Doctrine !
Rendez-vous donc bientôt dans la partie 2 pour y voir du concret !!!