Contributed by
Pierre du Plessis
in #27444.
Symfony Console component provides lots of utilities to render contents in the command console, such as progress bars, tables with all kinds of styles, interactive questions, etc.
In Symfony 4.1 we even introduced output sections allowing to update different parts of the output independently. In Symfony 5.1 we've introduced another advanced feature which will allow you control the cursor.
Thanks to the new Symfony\Component\Console\Cursor
class and its expressive
API, you can show/hide the cursor, move it up/down/left/right, clear parts of
the output, etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | namespaceApp\Command;useSymfony\Component\Console\Command\Command;useSymfony\Component\Console\Cursor;useSymfony\Component\Console\Input\InputInterface;useSymfony\Component\Console\Output\OutputInterface;classSomeCommandextendsCommand{protectedstatic$defaultName='app:some-command';// ...protectedfunctionexecute(InputInterface$input,OutputInterface$output){// ...$cursor=newCursor();// 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();}} |
In addition to these methods, the new Cursor
class provides several
utilities to clean the output:
1 2 3 4 5 6 7 8 9 10 11 | // 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(); |
Sponsor the Symfony project.