Novidade no Symfony 4.1: Saída Avançada do Console
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