Новое в Symfony 5.1: Управление курсором

Компонент Symfony Console предоставляет множество утилит для отображения содержимого в командной консоли, таких как индикаторы выполнения, таблицы со всеми видами стилей, интерактивные вопросы и т. д.

В Symfony 4.1 даже ввели разделы вывода, позволяющие независимо обновлять различные части вывода. В Symfony 5.1 представили еще одну расширенную функцию, которая позволит вам управлять курсором.

Благодаря новому классу Symfony\Component\Console\Cursor и его выразительному API вы можете показать/скрыть курсор, переместить его вверх/вниз/влево/вправо, очистить части вывода и т. д.

namespace App\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Cursor;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class SomeCommand extends Command
{
    protected static $defaultName = 'app:some-command';

    // ...

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // ...

        $cursor = new Cursor($output);

        // argument for left/right is "number of columns" (1 by default)
        // argument for top/bottom is "number of rows" (1 by default)
        $cursor->moveUp(2)->moveRight();
        $cursor->moveDown();

        // move to an arbitrary (column, row) position
        $cursor->moveToPosition(7, 15);

        // you can show/hide the cursor, save/restore its position, etc.
        $cursor->savePosition()->hide();
    }
}

В дополнение к этим методам новый класс Cursor предоставляет несколько утилит для очистки выходных данных:

// clears the entire line where the cursor is at
$cursor->clearLine();

// clears the contents of the current line starting from the cursor position
$cursor->clearLineAfter();

// clears all the output from the cursors' current position to the end of the screen.
$cursor->clearOutput();

// clears the entire screen
$cursor->clearScreen();