Blog


Comment créer une commande Symfony ?

Le , par .

Voici une fonctionnalité très intéressante de Symfony, mais que trop de débutants méconnaissent ou sous-utilisent.

Vous avez forcément besoin un moment ou un autre de mettre en place un cron, ou une tâche répétitive, que ce soit pour du développement ou en production. Dans ce cas, plutôt que de passer à l'ancienne par votre navigateur, privilégiez de loin l'utilisation de commande Symfony : propre et efficace !

Pour cela, il suffit d'avoir dans votre bundle un répertoire Command. A l'intérieur, pour chaque nouvelle commande que vous voulez créer, ajoutez un fichier se terminant par Command, par exemple ExampleCommand.php. C'est tout !

Ensuite, ce n'est qu'un peu de syntaxe à connaître, voici l'exemple tiré de la documentation :

<?php
// src/Acme/DemoBundle/Command/GreetCommand.php
namespace Acme\DemoBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

class GreetCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this
            ->setName('demo:greet')
            ->setDescription('Saluer une personne')
            ->addArgument('name', InputArgument::OPTIONAL, 'Qui voulez vous saluer??')
            ->addOption('yell', null, InputOption::VALUE_NONE, 'Si définie, la tâche criera en majuscules')
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $name = $input->getArgument('name');
        if ($name) {
            $text = 'Bonjour '.$name;
        } else {
            $text = 'Bonjour';
        }

        if ($input->getOption('yell')) {
            $text = strtoupper($text);
        }

        $output->writeln($text);
    }
}

C'est tout !

Vous pouvez maintenant exécuter la méthode execute() via php app/console demo:greet Fabien.

Et bien sûr, vous avez accès au conteneur de services car cette classe étend ContainerAware, via $this->getContainer(),

Retour à la liste

Commentaires

Le , a écrit :

Merci bcp pout ton article simple qui va droit au but


Le , a écrit :

g


Le , a écrit :

Merci bcp pr votre tuto


Le , a écrit :

C'est vrai que les commandes symfony 2 sont (très !) utiles, attention cependant à pas passer par Symfony 2 pour faire tout et n'importe quoi: devoir charger Symfony 2 et Doctrine(ou Propel) dans un cron, ça a un coût et c'est très cher !


Le , a écrit :

Merci, vive Winzou :)


Le , a écrit :

Moi je dis bravo pour tes tutos, je suis fan. Continu comme, j'adore.


Le , a écrit :

Dans le cadre d'une application hors bundle / Symfony, mais qui utilise le package symfony/console, tu auras besoin d'enregistrer toi-même ta propre commande, via un addCommand sur ton Application. :)


Poster un nouveau commentaire