Nuevo en Symfony 4.1: mejoras en la consola

La nueva funcionalidad estrella del componente Console en Symfony 4.1 es la que permite manipular la salida de la consola de forma avanzada. No obstante, hemos añadido muchas otras novedades interesantes a este componente.

Ejecutar el comando sugerido

Cuando escribes mal el nombre de un comando, Symfony te muestra una lista de posibles alternativas con comandos que tienen nombres parecidos. En Symfony 4.1 si solo hay una alternativa, Symfony te preguntará si quieres ejecutarla directamente:

$ ./bin/console app:user:impot
 
  Command "app:user:impot" not defined.
  Do you want to run "app:user:import" instead? [y/n]

Esta funcionalidad fue contribuida por Pierre du Plessis en el pull request #25732.

Nuevos estilos para las tablas

En Symfony 4.1 las tablas que muestren los comandos de consola pueden hacer uso de dos nuevos estilos llamados box y box-double:

$table->setStyle('box');
$table->render();
┌───────────────┬──────────────────────────┬──────────────────┐
│ ISBN          │ Title                    │ Author           │
├───────────────┼──────────────────────────┼──────────────────┤
│ 99921-58-10-7 │ Divine Comedy            │ Dante Alighieri  │
│ 9971-5-0210-0 │ A Tale of Two Cities     │ Charles Dickens  │
│ 960-425-059-0 │ The Lord of the Rings    │ J. R. R. Tolkien │
│ 80-902734-1-6 │ And Then There Were None │ Agatha Christie  │
└───────────────┴──────────────────────────┴──────────────────┘
$table->setStyle('box-double');
$table->render();
╔═══════════════╤══════════════════════════╤══════════════════╗
║ ISBN          │ Title                    │ Author           ║
╠═══════════════╪══════════════════════════╪══════════════════╣
║ 99921-58-10-7 │ Divine Comedy            │ Dante Alighieri  ║
║ 9971-5-0210-0 │ A Tale of Two Cities     │ Charles Dickens  ║
║ 960-425-059-0 │ The Lord of the Rings    │ J. R. R. Tolkien ║
║ 80-902734-1-6 │ And Then There Were None │ Agatha Christie  ║
╚═══════════════╧══════════════════════════╧══════════════════╝

Esta funcionalidad fue contribuida por Dany Maillard en el pull request #25301 y #26693.

Nuevos métodos para crear estilos de tablas

Además de estos nuevos estilos, hemos añadido un montón de nuevos métodos para que puedas configurar cualquier parte de la tabla y así puedas crear tus propios estilos.

Por ejemplo, el nuevo método setCrossingChars() permite configurar nueve caracteres diferentes utilizados para dibujar la tabla:

public function setCrossingChars(
    string $cross, string $topLeft, string $topMid, string $topRight,
    string $midRight, string $bottomRight, string $bottomMid,
    string $bottomLeft, string $midLeft
);
 
// * 1---------------2-----------------------2------------------3
// | ISBN          | Title                 | Author           |
// 8---------------0-----------------------0------------------4
// | 99921-58-10-7 | Divine Comedy         | Dante Alighieri  |
// | 9971-5-0210-0 | A Tale of Two Cities  | Charles Dickens  |
// | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien |
// 7---------------6-----------------------6------------------5
 
// @param string $cross       Crossing char (see #0 of example)
// @param string $topLeft     Top left char (see #1 of example)
// @param string $topMid      Top mid char (see #2 of example)
// @param string $topRight    Top right char (see #3 of example)
// @param string $midRight    Mid right char (see #4 of example)
// @param string $bottomRight Bottom right char (see #5 of example)
// @param string $bottomMid   Bottom mid char (see #6 of example)
// @param string $bottomLeft  Bottom left char (see #7 of example)
// @param string $midLeft     Mid left char (see #8 of example)

Esta funcionalidad fue contribuida por Dany Maillard en el pull request #25456.

Añadido soporte para iteradores

En Symfony 4.1, los métodos write() y writeln() han añadido soporte para que puedas pasarles un iterador de PHP en vez de tener que pasarles todos los contenidos a la vez:

private function generateMessages(): iterable
{
    yield 'foo';
    yield 'bar';
}
 
// ...
$output->writeln($this->generateMessages());
// La salida por pantalla es:
// foo\n
// bar\n

Esta funcionalidad fue contribuida por Tobias Schultze y Maxime Steinhausser en el pull request #26847 y #26863.

Fuente: New in Symfony 4.1: Console improvements

Comentarios

Publicada el

22 de junio de 2018

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.