Novidade no Symfony 4.1: Saída Avançada do Console

Andréia Bohner
2 min readApr 13, 2018

--

O componente Console é o segundo componente mais popular do Symfony (mais de 82 milhões de downloads!) e está repleto de recursos incríveis. No Symfony 4.1 ele foi melhorado ainda mais com um recurso para criar e manipular várias seções de saída.

Atualmente, exibir informações em um console de comando é uma operação bastante básica:

class MyCommand extends Command
{
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('Display some information...');

// ...

$output->writeln('Display more information...');
}
}

No Symfony 4.1 você poderá exibir informações, sobrescrevê-las, deletar parte delas e atualizar diferentes partes da saída simultaneamente. As novas operações são baseadas em “seções de saída”, que são regiões gerenciadas independentemente da saída do console:

class MyCommand extends Command
{
protected function execute(InputInterface $input, OutputInterface $output)
{
$section = $output->section();
$section->writeln('Display some information...');
// ...
}
}

Sobrescrevendo o conteúdo da saída

O novo método overwrite() apaga todo o conteúdo da seção e os substitui pelo conteúdo fornecido:

$section = $output->section();
$section->writeln('Downloading the file...');
// ...
$section->overwrite('Uncompressing the file...');
// ...
$section->overwrite('Copying the contents...');
// ...

Excluindo o conteúdo da saída

O novo método clear(int $numLines) exclui os últimos $numLines da seção (ou todo o conteúdo, se nenhum argumento for fornecido):

$section = $output->section();
$section->writeln('Welcome to the installation Process!');
$section->writeln('Downloading the file...');
$section->writeln('Uncompressing the file...');
$section->writeln('Copying the contents...');
// ...
$section->clear(3);
$section->writeln('The installation is complete!');

Acrescentando linhas nas tabelas renderizadas

Nas versões anteriores do Symfony, para exibir uma tabela era necessário conhecer todas as suas linhas e colunas. No entanto, o novo método appendRow(), que funciona como o método addRow() existente, permite adicionar novas linhas para tabelas já exibidas:

$section = $output->section();
$table = new Table($section);

$table->addRow(['Row 1']);
// display the table with the known contents
$table->render();

// add a new row with new contents to the already displayed table
$table->appendRow(['Row 2']);

Gerenciando Múltiplas Saídas

O recurso novo mais interessante é que você pode criar quantas seções de saída forem necessárias e gerenciá-las independentemente. O exemplo a seguir exibe uma barra de progresso enquanto uma tabela está sendo atualizada e quando o comando termina, a barra de progresso é removida e a tabela é mantida:

$section1 = $output->section();
$section2 = $output->section();

$progress = new ProgressBar($section1);
$progress->start(5);

$table = new Table($section2);
$table->addRow(['Row 1']);
$table->render();

foreach ($rowsToProcess as $i => $row) {
$table->appendRow(['Row '.$i++]);
$progress->advance();
// ...
}

$progress->finish();
$section1->clear();

Tradução de: New in Symfony 4.1: Advanced Console Output

--

--