[ Index ] |
PHP Cross Reference of phpBB-3.3.14-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 3 /* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12 namespace Symfony\Component\Console\DependencyInjection; 13 14 use Symfony\Component\Console\Command\Command; 15 use Symfony\Component\Console\CommandLoader\ContainerCommandLoader; 16 use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 17 use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass; 18 use Symfony\Component\DependencyInjection\ContainerBuilder; 19 use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; 20 use Symfony\Component\DependencyInjection\TypedReference; 21 22 /** 23 * Registers console commands. 24 * 25 * @author Grégoire Pineau <lyrixx@lyrixx.info> 26 */ 27 class AddConsoleCommandPass implements CompilerPassInterface 28 { 29 private $commandLoaderServiceId; 30 private $commandTag; 31 32 public function __construct($commandLoaderServiceId = 'console.command_loader', $commandTag = 'console.command') 33 { 34 $this->commandLoaderServiceId = $commandLoaderServiceId; 35 $this->commandTag = $commandTag; 36 } 37 38 public function process(ContainerBuilder $container) 39 { 40 $commandServices = $container->findTaggedServiceIds($this->commandTag, true); 41 $lazyCommandMap = []; 42 $lazyCommandRefs = []; 43 $serviceIds = []; 44 $lazyServiceIds = []; 45 46 foreach ($commandServices as $id => $tags) { 47 $definition = $container->getDefinition($id); 48 $class = $container->getParameterBag()->resolveValue($definition->getClass()); 49 50 $commandId = 'console.command.'.strtolower(str_replace('\\', '_', $class)); 51 52 if (isset($tags[0]['command'])) { 53 $commandName = $tags[0]['command']; 54 } else { 55 if (!$r = $container->getReflectionClass($class)) { 56 throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id)); 57 } 58 if (!$r->isSubclassOf(Command::class)) { 59 throw new InvalidArgumentException(sprintf('The service "%s" tagged "%s" must be a subclass of "%s".', $id, $this->commandTag, Command::class)); 60 } 61 $commandName = $class::getDefaultName(); 62 } 63 64 if (null === $commandName) { 65 if (isset($serviceIds[$commandId]) || $container->hasAlias($commandId)) { 66 $commandId = $commandId.'_'.$id; 67 } 68 if (!$definition->isPublic() || $definition->isPrivate()) { 69 $container->setAlias($commandId, $id)->setPublic(true); 70 $id = $commandId; 71 } 72 $serviceIds[$commandId] = $id; 73 74 continue; 75 } 76 77 $serviceIds[$commandId] = $id; 78 $lazyServiceIds[$id] = true; 79 unset($tags[0]); 80 $lazyCommandMap[$commandName] = $id; 81 $lazyCommandRefs[$id] = new TypedReference($id, $class); 82 $aliases = []; 83 84 foreach ($tags as $tag) { 85 if (isset($tag['command'])) { 86 $aliases[] = $tag['command']; 87 $lazyCommandMap[$tag['command']] = $id; 88 } 89 } 90 91 $definition->addMethodCall('setName', [$commandName]); 92 93 if ($aliases) { 94 $definition->addMethodCall('setAliases', [$aliases]); 95 } 96 } 97 98 $container 99 ->register($this->commandLoaderServiceId, ContainerCommandLoader::class) 100 ->setPublic(true) 101 ->setArguments([ServiceLocatorTagPass::register($container, $lazyCommandRefs), $lazyCommandMap]); 102 103 $container->setParameter('console.command.ids', $serviceIds); 104 $container->setParameter('console.lazy_command.ids', $lazyServiceIds); 105 } 106 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Nov 25 19:05:08 2024 | Cross-referenced by PHPXref 0.7.1 |