Updated the style of the event commands

This commit is contained in:
Javier Eguiluz 2015-09-29 15:05:14 +02:00 committed by Fabien Potencier
parent 112c66c944
commit 6633cac4e7
4 changed files with 45 additions and 64 deletions

View File

@ -16,6 +16,7 @@ use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
/**
@ -58,31 +59,24 @@ EOF
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$output = new SymfonyStyle($input, $output);
$dispatcher = $this->getEventDispatcher();
$options = array();
if ($event = $input->getArgument('event')) {
if (!$dispatcher->hasListeners($event)) {
$formatter = $this->getHelperSet()->get('formatter');
$formattedBlock = $formatter->formatBlock(
sprintf('[NOTE] The event "%s" does not have any registered listeners.', $event),
'fg=yellow',
true
);
$output->writeln($formattedBlock);
$output->warning(sprintf('The event "%s" does not have any registered listeners.', $event));
return;
}
$options = array('event' => $event);
} else {
$options = array();
}
$helper = new DescriptorHelper();
$options['format'] = $input->getOption('format');
$options['raw_text'] = $input->getOption('raw');
$options['output'] = $output;
$helper->describe($output, $dispatcher, $options);
}

View File

@ -12,6 +12,7 @@
namespace Symfony\Bundle\FrameworkBundle\Console\Descriptor;
use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\DependencyInjection\Alias;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
@ -349,42 +350,23 @@ class TextDescriptor extends Descriptor
{
$event = array_key_exists('event', $options) ? $options['event'] : null;
$label = 'Registered listeners';
if (null !== $event) {
$label .= sprintf(' for event <info>%s</info>', $event);
$title = sprintf('Registered Listeners for "%s" Event', $event);
} else {
$label .= ' by event';
$title = 'Registered Listeners Grouped by Event';
}
$this->writeText($this->formatSection('event_dispatcher', $label)."\n", $options);
$options['output']->title($title);
$registeredListeners = $eventDispatcher->getListeners($event);
$registeredListeners = $eventDispatcher->getListeners($event, true);
if (null !== $event) {
$this->writeText("\n");
$table = new Table($this->getOutput());
$table->getStyle()->setCellHeaderFormat('%s');
$table->setHeaders(array('Order', 'Callable'));
foreach ($registeredListeners as $order => $listener) {
$table->addRow(array(sprintf('#%d', $order + 1), $this->formatCallable($listener)));
}
$table->render();
$this->renderEventListenerTable($registeredListeners, $options['output']);
} else {
ksort($registeredListeners);
foreach ($registeredListeners as $eventListened => $eventListeners) {
$this->writeText(sprintf("\n<info>[Event]</info> %s\n", $eventListened), $options);
$table = new Table($this->getOutput());
$table->getStyle()->setCellHeaderFormat('%s');
$table->setHeaders(array('Order', 'Callable'));
foreach ($eventListeners as $order => $eventListener) {
$table->addRow(array(sprintf('#%d', $order + 1), $this->formatCallable($eventListener)));
}
$table->render();
$options['output']->section(sprintf('"%s" event', $eventListened));
$this->renderEventListenerTable($eventListeners, $options['output']);
}
}
}
@ -400,21 +382,20 @@ class TextDescriptor extends Descriptor
/**
* @param array $array
*/
private function renderEventListenerTable(array $eventListeners)
private function renderEventListenerTable(array $eventListeners, SymfonyStyle $renderer)
{
$table = new Table($this->getOutput());
$table->getStyle()->setCellHeaderFormat('%s');
$table->setHeaders(array('Order', 'Callable', 'Priority'));
$tableHeaders = array('Order', 'Callable', 'Priority');
$tableRows = array();
krsort($eventListeners);
$order = 1;
foreach ($eventListeners as $priority => $listeners) {
foreach ($listeners as $listener) {
$table->addRow(array(sprintf('#%d', $order++), $this->formatCallable($listener), $priority));
$tableRows[] = array(sprintf('#%d', $order++), $this->formatCallable($listener), $priority);
}
}
$table->render();
$renderer->table($tableHeaders, $tableRows);
}
/**

View File

@ -1,8 +1,9 @@
<info>[event_dispatcher]</info> Registered listeners for event <info>event1</info>
Registered Listeners for "event1" Event
=======================================
+-------+-------------------+
| Order | Callable |
+-------+-------------------+
| #1 | global_function() |
| #2 | \Closure() |
+-------+-------------------+
------- ------------------- ----------
Order Callable Priority
------- ------------------- ----------
#1 global_function() 255
#2 \Closure() -1
------- ------------------- ----------

View File

@ -1,16 +1,21 @@
<info>[event_dispatcher]</info> Registered listeners by event
Registered Listeners Grouped by Event
=====================================
<info>[Event]</info> event1
+-------+-------------------+
| Order | Callable |
+-------+-------------------+
| #1 | global_function() |
| #2 | \Closure() |
+-------+-------------------+
"event1" event
--------------
<info>[Event]</info> event2
+-------+-----------------------------------------------------------------------------------+
| Order | Callable |
+-------+-----------------------------------------------------------------------------------+
| #1 | Symfony\Bundle\FrameworkBundle\Tests\Console\Descriptor\CallableClass::__invoke() |
+-------+-----------------------------------------------------------------------------------+
------- ------------------- ----------
Order Callable Priority
------- ------------------- ----------
#1 global_function() 255
#2 \Closure() -1
------- ------------------- ----------
"event2" event
--------------
------- ----------------------------------------------------------------------------------- ----------
Order Callable Priority
------- ----------------------------------------------------------------------------------- ----------
#1 Symfony\Bundle\FrameworkBundle\Tests\Console\Descriptor\CallableClass::__invoke() 0
------- ----------------------------------------------------------------------------------- ----------