Task #49016
Task #51183: CLI improvements
Use Symfony.Console for Output + Interaction in CommandController
Status: | Resolved | Start date: | 2013-06-11 | |
---|---|---|---|---|
Priority: | Should have | Due date: | ||
Assigned To: | - | % Done: | 100% |
|
Category: | - | |||
Target version: | - | |||
Sprint: | Has patch: | No | ||
PHP Version: | Complexity: |
Description
I think we should make use of the Smfony.Console component for output and interaction. It offers anything someone writing a command might wish for:
- easy output coloring through "<error>Warning!</error>"
- TableHelper to render a formatted table
- ProgressHelper to render and advance and progress bar
- DialogHelper with numerous types of questions like: select, ask, confirm, askHidden, etc
I already tested to use it inside an ActionController yesterday, which worked quite easily.
Another thing i testet yesterday was, to ask the user for missing arguments instead of failing with "Required argument "foo" is not set.":
./flow kickstart:model Please specify the required argument "packageKey": My.Package Please specify the required argument "modelName":
This change would add a dependency for Symfony/Console, but in most cases it is there already because Doctrine depends on it.
Associated revisions
[!!!][FEATURE] Integrate Symfony/Console into CommandController
This extends the base ``CommandController`` by some convenience
helpers from the ``symfony/console`` package:
- easy output coloring through "<error>Warning!</error>"
- TableHelper to render values to a grid
- ProgressHelper to render and advance and progress bars
- DialogHelper with numerous types of questions like: select,
ask, confirm, askHidden, etc
Additionally this change improves the
``mapRequestArgumentsToControllerArguments()`` method to ask for
missing required arguments instead of quitting with an exception.
You can make use of the new features by calling the introduced
proxy methods from within your CommandController:
- outputTable()
- select()
- ask()
- askConfirmation()
- askHiddenResponse()
- askAndValidate()
- askHiddenResponseAndValidate()
- progressStart()
- progressSet()
- progressAdvance()
- progressFinish()
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 outputs where collected in the ``Cli\Response``
and only rendered to the console at the end of a CLI request.
Now all methods producing output (inluding ``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.
Resolves: #49016
Releases: master
Change-Id: I063742aca1898695f2e40f36b3e207248ac6e55c
[BUGFIX] Fix CommandController unit tests
Adjusts the ``CommandControllerTest`` to the CommandController
that has been adjusted with
I063742aca1898695f2e40f36b3e207248ac6e55c
Change-Id: I33c54bfcbd116c5fcf10688b8e01f858fdfdd6b1
Related: #49016
Releases: master
[BUGFIX] Re-add styling for standard tags in CLI
With the integration of ``symfony/console`` in #49016 the support for
some HTML tags was lost, namely ``<b>``, ``<i>``, ``<u>``, ``<em>``
and ``<strike>``.
This change registers these tags again in the default ConsoleOutput.
Note: In order to get the formatted output to work the ``posix`` PHP
extension is required!
Change-Id: I8f3597c3b0856fc1159c7c173c0cfebcbf2278a6
Related: #49016
Releases: master
[FEATURE] Automatically move generated migration to package
This adds some interaction to the ``doctrine:migrationgenerate``
command allowing to move generated doctrine migrations to the
specified package.
Example output::
Do you want to move the migration to one of these Packages?
[0 ] Don't Move
[1 ] TYPO3.Fluid
[2 ] TYPO3.Eel
[3 ] TYPO3.Flow
[4 ] TYPO3.Party
...
Change-Id: I441d6e78217e0ca1425c46600b8a443c50f9e0c0
Releases: master
Related: #49016
[BUGFIX] Adjust CommandLine documentation to refactored console output
This adjusts the ``CommandLine`` section of the documentation to
changes introduced with Ia77c62b41fb598bdfb7b81c530494ba819a590d1.
Change-Id: I2c0c372bd30604b235c614f6eb878563f1a4b398
Related: #49016
Releases: master, 2.3
[BUGFIX] Adjust CommandLine documentation to refactored console output
This adjusts the ``CommandLine`` section of the documentation to
changes introduced with Ia77c62b41fb598bdfb7b81c530494ba819a590d1.
Change-Id: I2c0c372bd30604b235c614f6eb878563f1a4b398
Related: #49016
Releases: master, 2.3
History
#1 Updated by Marc Neuhaus about 2 years ago
A little test i did yesterday: http://dl.dropbox.com/u/314491/Screenshots/uriof0z1paz9.png
#2 Updated by Bastian Waidelich almost 2 years ago
- Parent task set to #51183
#3 Updated by Kay Strobach over 1 year ago
@Marc please post your example code, i'm extremly interested.
#4 Updated by Kay Strobach over 1 year ago
That's what i found out so far:
https://gist.github.com/kaystrobach/7500128
The cleaner version would be to modify the CliResponse directly, this would also make it possible to use the progressbar and the table renderer ...
This should be possible with AOP as well -.-
#5 Updated by Kay Strobach over 1 year ago
btw it does not make any sense for me to buffer the output of a cli request, it should be always passed directly.
the send method should be simply empty and the appendContent should directly print the content!
#6 Updated by Kay Strobach over 1 year ago
Just updated my gist with an AOP implementation https://gist.github.com/kaystrobach/7500128
#7 Updated by Marc Neuhaus over 1 year ago
Hey i converted My test into an abstract Controller in Famelo.Common:
:-)
#8 Updated by Kay Strobach over 1 year ago
could you make a RFC for that as patch - i would gladly review
#9 Updated by Marc Neuhaus over 1 year ago
i don't think this will have a chance to get into master in this current form, because it completely circumvents the default TYPO3.Flow Response.
Not sure how exactly to tackle this. i'll have to talk to robert about this i guess :)
#10 Updated by Kay Strobach over 1 year ago
there was a chat with atleast RafealK today about this problem, i will take a look on it, i think we need to implement this in CLI\Response.
#11 Updated by Stefano Kowalke about 1 year ago
Is there any updates on that topic?
#12 Updated by Marc Neuhaus about 1 year ago
I added this topic to the next discussion meething :)
#13 Updated by Gerrit Code Review about 1 year ago
- Status changed from New to Under Review
Patch set 1 for branch master of project Packages/TYPO3.Flow has been pushed to the review server.
It is available at https://review.typo3.org/30653
#14 Updated by Marc Neuhaus about 1 year ago
Conclusion of the technical discussion meeting (http://wiki.typo3.org/TYPO3_Neos-DiscussionMeetings):
As we already have a hard dependency to Symfony/Console we decided to extend the existing \TYPO3\Flow\Cli\CommandController to use the Symfony console internally. The API will be backwards compatible with one exception: $this->output() and $this->outputLine() will no longer buffer the output until the end of the request but render content directly to the console. This is a desired side-effect that enables features like progress bars.
#15 Updated by Gerrit Code Review about 1 year ago
Patch set 2 for branch master of project Packages/TYPO3.Flow has been pushed to the review server.
It is available at https://review.typo3.org/30653
#16 Updated by Gerrit Code Review about 1 year ago
Patch set 3 for branch master of project Packages/TYPO3.Flow has been pushed to the review server.
It is available at https://review.typo3.org/30653
#17 Updated by Gerrit Code Review about 1 year ago
Patch set 4 for branch master of project Packages/TYPO3.Flow has been pushed to the review server.
It is available at https://review.typo3.org/30653
#18 Updated by Anonymous about 1 year ago
- Status changed from Under Review to Resolved
- % Done changed from 0 to 100
Applied in changeset 57a18f828b3c0c73c37523ed576e1f6ac9d77396.