5 votes

Sortie de console Symfony2 sans OutputInterface

J'essaie d'imprimer certaines informations sur la console dans une commande Symfony Console. Normalement, vous feriez quelque chose comme ceci :

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

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

    $output->writeln($text);
}

Pour le code complet de l'exemple - Documentation Symfony

Malheureusement, je ne peux pas accéder à la OutputInterface . Est-il possible d'imprimer un message sur la console ?

Malheureusement, je ne peux pas passer le OutputInterface à la classe où je veux imprimer une sortie.

8voto

Touki Points 3963

Pour comprendre la question du débogage ponctuel, vous pouvez toujours imprimer des messages de débogage avec echo o var_dump

Si vous envisagez d'utiliser une commande sans l'application Symfony avec des messages de débogage globaux, voici un moyen de le faire.

Symfony offre 3 différents OutputInterface s

  • NullOutput - Il n'y aura pas de sortie du tout et la commande restera silencieuse.
  • Sortie de console - Les messages de la console s'afficheront
  • Sortie de flux - Permet d'imprimer des messages dans un flux donné

Débogage vers un fichier

Ainsi, chaque fois que vous appelez $output->writeln() dans votre commande, il écrira une nouvelle ligne dans le fichier /path/to/debug/file.log

use Symfony\Component\Console\Output\StreamOutput;
use Symfony\Component\Console\Input\ArrayInput;
use Acme\FooBundle\Command\MyCommand;

$params = array();
$input  = new ArrayInput($params);

$file   = '/path/to/debug/file.log';
$handle = fopen($file, 'w+');
$output = new StreamOutput($handle);

$command = new MyCommand;
$command->run($input, $output);

fclose($handle);

Débogage dans la console

C'est tranquillement le même processus, sauf que vous utilisez ConsoleOutput au lieu de

use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Input\ArrayInput;
use Acme\FooBundle\Command\MyCommand;

$params = array();
$input  = new ArrayInput($params);

$output = new ConsoleOutput();

$command = new MyCommand;
$command->run($input, $output);

Pas de débogage

Aucun message ne sera imprimé

use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\Console\Input\ArrayInput;
use Acme\FooBundle\Command\MyCommand;

$params = array();
$input  = new ArrayInput($params);

$output = new NullOutput();

$command = new MyCommand;
$command->run($input, $output);

1voto

Tib Points 1182

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X