Fix registering lazy command services with autoconfigure enabled

This commit is contained in:
Robin Chalas 2017-07-17 18:13:39 +02:00
parent 535208042a
commit 8a71aa31bb
3 changed files with 12 additions and 14 deletions

View File

@ -70,20 +70,15 @@ class AddConsoleCommandPass implements CompilerPassInterface
$serviceIds[$commandId] = false; $serviceIds[$commandId] = false;
$commandName = $tags[0]['command']; $commandName = $tags[0]['command'];
unset($tags[0]);
$lazyCommandMap[$commandName] = $id; $lazyCommandMap[$commandName] = $id;
$lazyCommandRefs[$id] = new TypedReference($id, $class); $lazyCommandRefs[$id] = new TypedReference($id, $class);
$aliases = array(); $aliases = array();
foreach ($tags as $tag) { foreach ($tags as $tag) {
if (!isset($tag['command'])) { if (isset($tag['command'])) {
throw new InvalidArgumentException(sprintf('Missing "command" attribute on tag "%s" for service "%s".', $this->commandTag, $id)); $aliases[] = $tag['command'];
} $lazyCommandMap[$tag['command']] = $id;
if ($commandName !== $tag['command']) {
throw new InvalidArgumentException(sprintf('The "command" attribute must be the same on each "%s" tag for service "%s".', $this->commandTag, $id));
}
if (isset($tag['alias'])) {
$aliases[] = $tag['alias'];
$lazyCommandMap[$tag['alias']] = $id;
} }
} }

View File

@ -1431,8 +1431,9 @@ class ApplicationTest extends TestCase
$container->addCompilerPass(new AddConsoleCommandPass()); $container->addCompilerPass(new AddConsoleCommandPass());
$container $container
->register('lazy-command', LazyCommand::class) ->register('lazy-command', LazyCommand::class)
->addTag('console.command', array('command' => 'lazy:command', 'alias' => 'lazy:alias')) ->addTag('console.command', array('command' => 'lazy:command'))
->addTag('console.command', array('command' => 'lazy:command', 'alias' => 'lazy:alias2')); ->addTag('console.command', array('command' => 'lazy:alias'))
->addTag('console.command', array('command' => 'lazy:alias2'));
$container->compile(); $container->compile();
$application = new Application(); $application = new Application();

View File

@ -56,13 +56,14 @@ class AddConsoleCommandPassTest extends TestCase
$this->assertSame(array($alias => $id), $container->getParameter('console.command.ids')); $this->assertSame(array($alias => $id), $container->getParameter('console.command.ids'));
} }
public function testProcessRegisterLazyCommands() public function testProcessRegistersLazyCommands()
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container $command = $container
->register('my-command', MyCommand::class) ->register('my-command', MyCommand::class)
->setPublic(false) ->setPublic(false)
->addTag('console.command', array('command' => 'my:command', 'alias' => 'my:alias')) ->addTag('console.command', array('command' => 'my:command'))
->addTag('console.command', array('command' => 'my:alias'))
; ;
(new AddConsoleCommandPass())->process($container); (new AddConsoleCommandPass())->process($container);
@ -74,6 +75,7 @@ class AddConsoleCommandPassTest extends TestCase
$this->assertSame(array('my:command' => 'my-command', 'my:alias' => 'my-command'), $commandLoader->getArgument(1)); $this->assertSame(array('my:command' => 'my-command', 'my:alias' => 'my-command'), $commandLoader->getArgument(1));
$this->assertEquals(array(array('my-command' => new ServiceClosureArgument(new TypedReference('my-command', MyCommand::class)))), $commandLocator->getArguments()); $this->assertEquals(array(array('my-command' => new ServiceClosureArgument(new TypedReference('my-command', MyCommand::class)))), $commandLocator->getArguments());
$this->assertSame(array('console.command.symfony_component_console_tests_dependencyinjection_mycommand' => false), $container->getParameter('console.command.ids')); $this->assertSame(array('console.command.symfony_component_console_tests_dependencyinjection_mycommand' => false), $container->getParameter('console.command.ids'));
$this->assertSame(array(array('setName', array('my:command')), array('setAliases', array(array('my:alias')))), $command->getMethodCalls());
} }
public function visibilityProvider() public function visibilityProvider()