Nuevo en Symfony 2.7: Tablas avanzadas en los comandos de consola

El componente Console de Symfony es el segundo componente más popular en todo el mundo, con más de ocho millones de descargas en Packagist.org. Una de las claves de su éxito es que incluye un montón de opciones para hacer comandos de consola avanzados. En Symfony 2.7 hemos ido un paso más allá y ahora los comandos también pueden crear tablas con estructuras irregulares.

Añadido soporte para colspan y rowspan

Se han definido dos nuevas propiedades llamadas colspan y rowspan que funcionan igual que las opciones del mismo nombre en las tablas HTML. Estas propiedades se usan a través de la nueva clase TableCell que permite crear cualquier estructura irregular de tablas que puedas imaginar.

Ejemplo de tabla que utiliza la opción colspan

use Symfony\Component\Console\Helper\Table;
 
$table = new Table($output);
$table
    ->setHeaders(array('Título Columna #1', 'Título Columna #2', 'Título Columna #3'))
    ->setRows(array(
        array('Valor #1', 'Valor #2', 'Valor #3'),
        new TableSeparator(),
        array(new TableCell('Este valor ocupa 3 columnas de anchura.', array('colspan' => 3))),
    ))
;
$table->render();

El resultado de renderizar la tabla anterior sería:

+-------------------+-------------------+--------------------+
| Título Columna #1 | Título Columna #2 | Título Columna #1  |
+-------------------+-------------------+--------------------+
| Valor #1          | Valor #2          | Valor #3           |
+-------------------+-------------------+--------------------+
| Este valor ocupa 3 columnas de anchura.                    |
+-------------------+-------------------+--------------------+

Ejemplo de tabla que utiliza la opción rowspan

use Symfony\Component\Console\Helper\Table;
 
$table = new Table($output);
$table
    ->setHeaders(array('Título Columna #1', 'Título Columna #2', 'Título Columna #3'))
    ->setRows(array(
        array(
            new TableCell('Valor #1 que ocupa dos filas de alto.', array('rowspan' => 2)),
            'Valor #2 - 1',
            'Valor #3 - 1',
        ),
        array('Valor #2 - 2', 'Valor #3 - 2'),
    ))
;
$table->render();

El resultado de renderizar la tabla anterior sería:

+---------------------+-------------------+--------------------+
| Título Columna #1   | Título Columna #2 | Título Columna #3  |
+---------------------+-------------------+--------------------+
| Valor #1 que ocupa  | Valor #2 - 1      | Valor #3 - 1       |
| dos filas de alto.  | Valor #2 - 2      | Valor #3 - 2       |
+---------------------+-------------------+--------------------+

Por supuesto estas dos propiedades se pueden combinar en una misma tabla, con lo que su estructura puede ser tan irregular como necesites. Puedes echar un vistazo al código de los tests de las tablas para ver más ejemplos avanzados.

Añadido soporte para cabeceras de varias líneas

Una de las mejoras indirectas conseguidas gracias a las propiedades colspan y rowspan es que ahora las cabeceras de las tablas puede contener más de una fila. Esto es ideal para mostrar un título global en la tabla y después un título específico para cada columna:

use Symfony\Component\Console\Helper\Table;
 
$table = new Table($output);
$table
    ->setHeaders(array(
        array(new TableCell('Título principal de la tabla', array('colspan' => 3))),
        array('Título Columna #1', 'Título Columna #2', 'Título Columna #3'),
    ))
    ->setRows(array(
        // ...
    ))
;
$table->render();

El resultado de renderizar la tabla anterior sería:

+-------------------+-------------------+-------------------+
| Título principal de la tabla                              |
+-------------------+-------------------+-------------------+
| Título Columna #1 | Título Columna #2 | Título Columna #3 |
+-------------------+-------------------+-------------------+
| ...                                                       |
+-------------------+-------------------+-------------------+

Esta nueva funcionalidad ha sido desarrollada por Abdellatif Ait boudad y puedes ver todos los detalles en el pull request #13438.

Fuente: New in Symfony 2.7: Advanced table layouts for console commands

Comentarios

  1. Buen trabajo. Gracias.

    Alberto Menendez Romero el 31 de marzo de 2015, 6:49:33

Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente unos meses después de su publicación para asegurar que estos sigan siendo relevantes.

Publicada el

30 de marzo de 2015

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.