Lo nuevo en Symfony 3.2. Las mejoras de la consola (parte 2)

Fecha publicación:
Autor:

Continuando con las mejoras a la consola en Symfony 3.2, se van a mostrar otras 4 nuevas funcionalidades. Recordemos que al igual que en la primera parte lo que se busca es mejorar la experiencia de uso para los desarrolladores que usen el framework.

Se presenta una nueva clase Terminal

La clase Application de la Consola define varios métodos para obtener el alto y ancho de la ventana de la terminal.

Técnicamente hablando, obtener esta información para todas la posibles terminales de los múltiples sistemas operativos que existen es un proceso complejo, lento y propenso a errores. En Symfony 3.2 se ha decidido mover toda esta lógica a una nueva clase llamada Terminal:

Además, se ha mejorado la lógica que permite consultar o setear estos datos dándole prioridad a las variables de ambiente. Si las variables de ambiente COLUMNS y LINES  están definidas, la clase Terminal usa estas variables para  obtener las dimensiones. Cuando sea necesario setear estos valores, la clase también lo puede hacer directamente en las variables de ambiente.

Más adelante esta clase va a contar con mas métodos para asignar o consultar otras propiedades de la terminal, además de sus dimensiones. Por ahora, estos cambios han servido en momentos en que hay que realizar un ajuste a la ventana para que visualice correctamente, por ejemplo, el helper que muestra una barra de progreso.

Se introdujo una nueva interfaz llamada StreamableInputInterface

En Symfony 2.8 se agrego una nueva guía de estilos para los comandos de consola que facilitaba la creación de comandos con un aspecto consistente. Sin embargo, estos comandos eran muy difíciles de probar, especialmente cuando se usaba el helper ask() para agregar una entrada de datos del usuario.

En Symfony 3.2 se ha diseñado la interfaz StreamableInputInterface y tambien se abstrajo Symfony \ Component \ Console \ Input \ Input.  Este cambio permitió centralizar el mantenimiento de la entrada de datos en una sola clase y permitió que helper QuestionHelper fuera fácil de testear.

Se adicionó el método hasErrored() en ConsoleLogger

En Symfony 3.2, en la clase ConsoleLogger se ha incluido el método hasErrored() que retorna true inmediatamente se registra un mensaje de nivel ERROR. De esta manera no debemos adicionar una lógica propia para decidir si el comando debe devolver un código de error (exit(1)) o no.

Se ha agregado una característica “Lockable”

En Symfony 2.6 se agregó un mecanismo llamado LockHandler para bloquear cualquier cosa que estuviera en uso. Esto es usado principalmente para evitar problemas de concurrencia previniendo multiples ejecuciones de un mismo comando.

Symfony 3.2 cuenta con una mejora en esto que hace que mas fácil de usar a través de un LockableTrait (Leer: ¿Qué es un trait?). Este trait cuenta con un método lock()  que crea un bloqueo non-blocking que se llama luego del comando actual:

También se puede crear locks con nombres personalizados y locks en bloque que se quedan en dicho estado hasta que un lock existente sea levantado.

Eguiluz, J. (2016, 07). New in Symfony 3.2: Console Improvements (Part 2). Obtenido 10, 2016, de http://symfony.com/blog/new-in-symfony-3-2-console-improvements-part-2#added-a-haserrored-method-in-consolelogger