Accéder aux commandes Doctrine dans Symfony2

Cet article a été publié depuis plus de 6 mois, cela signifie que le contenu peut ne plus être d'actualité.

Vous ne le saviez peut-être pas, mais lorsque vous démarrez un projet Symfony2, Doctrine est fourni avec un certain nombre de commandes prédéfinit. Parmi ces dernières certaines peuvent être très utiles comme par exemple une commande permettant d’importer un fichier SQL en base de données.

Si vous ne le saviez pas, c’est normal, car ces commandes n’apparaissent pas par défaut dans la console de Symfony. Mais étant donnée qu’elles utilisent le composant Console du framework, il est facile d’y avoir accès.

Pour cela, la solution la plus simple est de créer une commande dans son projet et de la faire hériter de la commande Doctrine à laquelle on souhaite accéder.

Par exemple, si je souhaite accéder à la commande de Doctrine DBAL permettant d’insérer un fichier SQL en base de données, je peux écrire la commande ci-dessous :

namespace JDecool\Bundle\DemoBundle\Command;

use Doctrine\DBAL\Tools\Console\Command;
use Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper;
use Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class ImportCommand extends Command\ImportCommand
{
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $container = $this->getApplication()->getKernel()->getContainer();

        $doctrine = $container->get('doctrine');

        $em = $doctrine->getEntityManager();
        $db = $em->getConnection();

        $helperSet = $this->getHelperSet();
        $helperSet->set(new ConnectionHelper( $db ), 'db');
        $helperSet->set(new EntityManagerHelper( $em ), 'em');

        parent::execute($input, $output);
    }
}

Si vous souhaitez connaitre l’ensemble des commandes proposées par Doctrine, la liste est disponible sur la documentation officielle du projet.