Skip to content

Commit

Permalink
Fix registering lazy command services with autoconfigure enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
Robin Chalas committed Jul 19, 2017
1 parent 5352080 commit 8a71aa3
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 14 deletions.
Expand Up @@ -70,20 +70,15 @@ public function process(ContainerBuilder $container)

$serviceIds[$commandId] = false;
$commandName = $tags[0]['command'];
unset($tags[0]);
$lazyCommandMap[$commandName] = $id;
$lazyCommandRefs[$id] = new TypedReference($id, $class);
$aliases = array();

foreach ($tags as $tag) {
if (!isset($tag['command'])) {
throw new InvalidArgumentException(sprintf('Missing "command" attribute on tag "%s" for service "%s".', $this->commandTag, $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;
if (isset($tag['command'])) {
$aliases[] = $tag['command'];
$lazyCommandMap[$tag['command']] = $id;
}
}

Expand Down
5 changes: 3 additions & 2 deletions src/Symfony/Component/Console/Tests/ApplicationTest.php
Expand Up @@ -1431,8 +1431,9 @@ public function testRunLazyCommandService()
$container->addCompilerPass(new AddConsoleCommandPass());
$container
->register('lazy-command', LazyCommand::class)
->addTag('console.command', array('command' => 'lazy:command', 'alias' => 'lazy:alias'))
->addTag('console.command', array('command' => 'lazy:command', 'alias' => 'lazy:alias2'));
->addTag('console.command', array('command' => 'lazy:command'))
->addTag('console.command', array('command' => 'lazy:alias'))
->addTag('console.command', array('command' => 'lazy:alias2'));
$container->compile();

$application = new Application();
Expand Down
Expand Up @@ -56,13 +56,14 @@ public function testProcess($public)
$this->assertSame(array($alias => $id), $container->getParameter('console.command.ids'));
}

public function testProcessRegisterLazyCommands()
public function testProcessRegistersLazyCommands()
{
$container = new ContainerBuilder();
$container
$command = $container
->register('my-command', MyCommand::class)
->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);
Expand All @@ -74,6 +75,7 @@ public function testProcessRegisterLazyCommands()
$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->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()
Expand Down

0 comments on commit 8a71aa3

Please sign in to comment.