TYPO3 v15 dev-main snapshot ()
This commit is contained in:
+101
@@ -0,0 +1,101 @@
|
||||
|
||||
.. 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
|
||||
Reference in New Issue
Block a user