Nuevo en Symfony 4.1: mejoras en la salida de los comandos
El componente Console es el segundo más popular de Symfony, con unos 90 millones de descargas, y está lleno de funcionalidades muy útiles. En Symfony 4.1 hemos añadido una nueva funcionalidad todavía más increíble para poder manejar la salida de los comandos de consola de forma avanzada.
Actualmente, mostrar información en la consola es muy sencillo:
class MyCommand extends Command { protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('Mostrar información...'); // ... $output->writeln('Mostrar más información...'); } }
En Symfony 4.1, además de mostrar información, podrás sobreescribirla, borrarla total o parcialmente, actualizar diferentes partes de la pantalla a la vez y mucho más. Todas estas nuevas funcionalidades se basan en "secciones", que son zonas de la salida de la consola que se manejan independientemente:
class MyCommand extends Command { protected function execute(InputInterface $input, OutputInterface $output) { // por el momento este ejemplo produce el mismos resultado que // el ejemplo mostrado anteriormente $section = $output->section(); $section->writeln('Mostrar información en una sección...'); // ... } }
Sobreescribiendo contenidos
El nuevo método overwrite()
borra todos los contenidos actuales de la sección
y los reemplaza con los nuevos contenidos:
$section = $output->section(); $section->writeln('Descargando el archivo...'); // ... $section->overwrite('Descomprimiendo el archivo...'); // ... $section->overwrite('Copiando los contenidos...'); // ...
Borrando contenidos
El nuevo método clear(int $numeroDeLineas)
borra las últimas $numeroDeLineas
o todas si no se pasa ningún argumento:
$section = $output->section(); $section->writeln('Bienvenido/a al proceso de instalación'); $section->writeln('Descargando el archivo...'); $section->writeln('Descomprimiendo el archivo...'); $section->writeln('Copiando los contenidos...'); // ... $section->clear(3); $section->writeln('La instalación ha finalizado.');
Añadiendo filas a tablas existentes
En las versiones de Symfony anteriores, para mostrar una tabla debías conocer
de antemano todos sus contenidos. Gracias al nuevo método appendRow()
, que
funciona igual que el actual método addRow()
, ahora puedes añadir filas a una
tabla que ya se ha renderizado en la pantalla:
$section = $output->section(); $table = new Table($section); $table->addRow(['Fila 1']); // mostrar la tabla solamente con una fila $table->render(); // añadir otra fila a la tabla existente $table->appendRow(['Fila 2']);
Escribiendo en varias secciones a la vez
Lo mejor de esta nueva funcionalidad es que puedes crear tantas secciones como necesites y puedes escribir/borrar en ellas de manera independiente. El siguiente ejemplo muestra una barra de progreso a medida que se actualiza la tabla y cuando el comando termina, se borra solamente la barra de progreso:
$section1 = $output->section(); $section2 = $output->section(); $progress = new ProgressBar($section1); $progress->start(5); $table = new Table($section2); $table->addRow(['Fila 1']); $table->render(); foreach ($rowsToProcess as $i => $row) { $table->appendRow(['Fila '.$i++]); $progress->advance(); // ... } $progress->finish(); $section1->clear();
Esta funcionalidad fue contribuida por Pierre du Plessis en el pull request #24363.
Fuente: New in Symfony 4.1: Advanced Console Output
Comentarios
Proyectos Symfony destacados
La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.