Symfony のコンソール出力コンポーネントを既存の Symfony 以外のアプリに含めようとしていますが、全体的にはうまくいっています。
まだ私を逃しているように見えることの 1 つは、ProgressBar クラスを使用すると、送信しているすべての出力がプログレス バーの幅だけパディングされているように見えることです。
コードの大まかな概要は次のとおりです (さまざまな不要な部分が削除されています)。
public function run() {
$this->logger = new \Symfony\Component\Console\Output\StreamOutput(fopen('php://stdout', 'w'));
$this->logger->setVerbosity(\Symfony\Component\Console\Output\OutputInterface::VERBOSITY_DEBUG);
$this->progress = new \Symfony\Component\Console\Helper\ProgressBar($this->logger);
$this->progress->start();
$this->doStepOne();
$this->progress->finish();
}
public function doStepOne() {
$i = 1;
while($i < 10000000000) {
$this->info(sprintf('Sweet, done a thing on page #%d', $i));
}
}
public function info($message) {
$this->log(sprintf("<info>%s</info>", $message));
}
public function log($message) {
// This follows advice from http://symfony.com/doc/current/components/console/helpers/progressbar.html indicating that if you output content, you should ->clear() first and ->display() after.
// If I don't do this, then the progress bar is output on every line, immediately followed by $message
$this->progress->clear();
$this->logger->writeln($message);
$this->progress->advance();
$this->progress->display();
}
したがって、すべてが非常に簡単に見えます。繰り返しますが、私は Symfony コンソール出力内でこれを使用していないので、おそらくそれが理由ですが、奇妙に思えるので、他の誰かがそれに遭遇したかどうかを確認したいと思いました. Google-fu を使用しても何も見つかりませんでしたが、弱いのでしょうか?
例 (^C 文字は無視してください。これは、プロセスを終了するための Ctrl-C です): また、混乱を解消するために、最初に表示されている行には、追加したインデントがなく、2 行目には1 つのスペース文字があります。自分で挿入したインデント、混乱をお詫びします。