Fix registering lazy command services with autoconfigure enabled
This commit is contained in:
parent
535208042a
commit
8a71aa31bb
@ -70,20 +70,15 @@ class AddConsoleCommandPass implements CompilerPassInterface
|
||||
|
||||
$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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1431,8 +1431,9 @@ class ApplicationTest extends TestCase
|
||||
$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();
|
||||
|
@ -56,13 +56,14 @@ class AddConsoleCommandPassTest extends TestCase
|
||||
$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);
|
||||
@ -74,6 +75,7 @@ class AddConsoleCommandPassTest extends TestCase
|
||||
$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()
|
||||
|
Reference in New Issue
Block a user