Nuevo en Symfony 4.3: Barras de progreso iterables

La forma de trabajo habitual con las barras de progreso creadas con el componente Console de Symfony consiste en crear la barra, avanzar su progreso a medida que completes tus tareas y al final, hacer una llamada para asegurar que la barra se completa hasta el final.

use Symfony\Component\Console\Helper\ProgressBar;
 
$progressBar = new ProgressBar($output);
$progressBar->start();
 
// avanza la barra a medida que vayas completando tareas
$progressBar->advance();
 
// importante para hacer que la barra llegue al 100% al final
$progressBar->finish();

En Symfony 4.3 hemos mejorado las barras de progreso para permitir otras formas de trabajar con ellas. En concreto, gracias al nuevo método iterate(), puedes pasar una variable iterable (un array o un generador) y la barra se creará, avanzará y finalizará automáticamente.

El siguiente ejemplo define un generador muy sencillo:

$iterable = function () {
    yield 1;
    yield 2;
    // ...
};

Para mostrar una barra de progreso basada en el, haz lo siguiente:

use Symfony\Component\Console\Helper\ProgressBar;
 
$progressBar = new ProgressBar($output);
 
foreach ($progressBar->iterate($iterable) as $value) {
    // aquí es donde completas las tareas de tu código
}

En la consola de comandos verás algo como lo siguiente

0 [>---------------------------]
 1 [==============>-------------]
 2 [============================]

Si la variable es contable, el tamaño máximo de la barra de progreso también se establece automáticamente (en el ejemplo anterior no lo era, así que por eso la barra no indica su tamaño). Si no es contable, puedes establecer el tamaño a mano con el segundo argumento opcional de iterate():

foreach ($progressBar->iterate($iterable, 100) as $value) {
    // aquí es donde completas las tareas de tu código
}

Esta funcionalidad fue contribuida por Jérôme Vasseur en el pull request #29753.

Fuente: New in Symfony 4.3: Iterable progress bars

Comentarios

Publicada el

4 de abril de 2019

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.