Nuevo en Symfony 4.3: Mejorado el autocompletado en la consola

El componente Console incluye la posibilidad de autocompletar las respuestas a las preguntas creadas mediante el helper Question. Esto es muy útil por ejemplo para autocompletar clases y entidades en el MakerBundle y así mejorar tu productividad.

El único problema es que el autocompletado solo funciona cuando sabes todas las posibles respuestas de antemano. Esto es algo imposible por ejemplo cuando las sugerencias dependen de lo que escriba el usuario y es poco práctico cuando el autocompletado puede tener muchas respuestas (por ejemplo, autocompletar los contenidos de cualquier directorio de tu equipo).

En Symfony 4.3 hemos mejorado esta funcionalidad con un nuevo método llamado setAutocompleterCallback() que permite generar las respuestas del autocompletado de manera dinámica. Por ejemplo, el siguiente código muestra cómo autocompletar lo que está escribiendo el usuario para que solo pueda elegir archivos o directorios que existan:

use Symfony\Component\Console\Question\Question;
 
// ...
public function execute(InputInterface $input, OutputInterface $output)
{
    // esta función se llama cada vez que el usuario modifica lo que ha escrito
    $callback = function (string $userInput): array {
        $inputPath = preg_replace('%(/|^)[^/]*$%', '$1', $userInput);
        $inputPath = '' === $inputPath ? '.' : $inputPath;
 
        // CUIDADO: este ejemplo permite un acceso sin restricciones al sistema de
        // archivos completo. En aplicaciones reales, seguramente tengas que
        // restringir el acceso a determinados directorios
        $foundFilesAndDirs = @scandir($inputPath) ?: [];
 
        return array_map(function ($dirOrFile) use ($inputPath) {
            return $inputPath.$dirOrFile;
        }, $foundFilesAndDirs);
    };
 
    $question = new Question('Indica la ruta del archivo a procesar');
    $question->setAutocompleterCallback($callback);
 
    $filePath = $helper->ask($input, $output, $question);
}

Esta funcionalidad fue contribuida por Mikkel Paulson en el pull request #30997.

Fuente: New in Symfony 4.3: Better console autocomplete

Comentarios

Publicada el

5 de junio 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.