.. include:: /Includes.rst.txt .. _feature-59606: ================================================================== Feature: #59606 - Integrate Symfony/Console into CommandController ================================================================== See :issue:`59606` Description =========== The CommandController now makes use of Symfony/Console internally and provides various methods directly from the CommandController's `output` member: * TableHelper * outputTable($rows, $headers = NULL) * DialogHelper * select($question, $choices, $default = NULL, $multiSelect = false, $attempts = FALSE) * ask($question, $default = NULL, array $autocomplete = array()) * askConfirmation($question, $default = TRUE) * askHiddenResponse($question, $fallback = TRUE) * askAndValidate($question, $validator, $attempts = FALSE, $default = NULL, array $autocomplete = NULL) * askHiddenResponseAndValidate($question, $validator, $attempts = FALSE, $fallback = TRUE) * ProgressHelper * progressStart($max = NULL) * progressSet($current) * progressAdvance($step = 1) * progressFinish() Here's an example showing of some of those functions: .. code-block:: php namespace Acme\Demo\Command; use TYPO3\CMS\Extbase\Mvc\Controller\CommandController; /** * My command */ class MyCommandController extends CommandController { /** * @return string */ public function myCommand() { // render a table $this->output->outputTable(array( array('Bob', 34, 'm'), array('Sally', 21, 'f'), array('Blake', 56, 'm') ), array('Name', 'Age', 'Gender')); // select $colors = array('red', 'blue', 'yellow'); $selectedColorIndex = $this->output->select('Please select one color', $colors, 'red'); $this->outputLine('You choose the color %s.', array($colors[$selectedColorIndex])); // ask $name = $this->output->ask('What is your name?' . PHP_EOL, 'Bob', array('Bob', 'Sally', 'Blake')); $this->outputLine('Hello %s.', array($name)); // prompt $likesDogs = $this->output->askConfirmation('Do you like dogs?'); if ($likesDogs) { $this->outputLine('You do like dogs!'); } // progress $this->output->progressStart(600); for ($i = 0; $i < 300; $i ++) { $this->output->progressAdvance(); usleep(5000); } $this->output->progressFinish(); } } Impact ====== This change does not alter the public API so it is not breaking in the strict sense. But it introduces a new behavior: Previously all output was collected in the `Cli\Response` and only rendered to the console at the end of a CLI request. Now all methods producing output (including `output()` and `outputLine()`) render the result directly to the console. If you use `$this->response` directly or let the command method return a string, the rendering is still deferred until the end of the CLI request. .. index:: CLI, ext:extbase, PHP-API