5

Symfony コンソール コマンドでコンソールに情報を出力しようとしています。通常は次のようにします。

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);
}

例の完全なコードについて - Symfony Documentation

残念ながら、にアクセスできませんOutputInterface。コンソールにメッセージを出力することはできますか?

残念ながらOutputInterface、出力を印刷したいクラスに渡すことができません。

4

2 に答える 2

8

ポンクチュアル デバッグの問題を理解すると、いつでもデバッグ メッセージを出力できますechovar_dump

Symfony のアプリケーションなしでグローバル デバッグ メッセージを使用してコマンドを使用する場合は、次の方法があります。

Symfony は 3 つOutputInterfaceの異なる を提供します

  • NullOutput - 出力がまったく発生せず、コマンドを静かに保ちます
  • ConsoleOutput - コンソール メッセージが表示されます
  • StreamOutput - 指定されたストリームにメッセージを出力します

ファイルへのデバッグ

そのようにすると、コマンドを呼び出すたびに$output->writeln()、新しい行が書き込まれます/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);

コンソールでのデバッグ

ConsoleOutput代わりに使用することを除いて、静かに同じプロセスです

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);

デバッグなし

メッセージは印刷されません

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);
于 2013-08-14T17:11:36.317 に答える