* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bundle\FrameworkBundle\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; /** * A console command for autowiring information. * * @author Ryan Weaver * * @internal */ class DebugAutowiringCommand extends ContainerDebugCommand { protected static $defaultName = 'debug:autowiring'; /** * {@inheritdoc} */ protected function configure() { $this ->setDefinition([ new InputArgument('search', InputArgument::OPTIONAL, 'A search filter'), ]) ->setDescription('Lists classes/interfaces you can use for autowiring') ->setHelp(<<<'EOF' The %command.name% command displays all classes and interfaces that you can use as type-hints for autowiring: php %command.full_name% You can also pass a search term to filter the list: php %command.full_name% log EOF ) ; } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $io = new SymfonyStyle($input, $output); $errorIo = $io->getErrorStyle(); $builder = $this->getContainerBuilder(); $serviceIds = $builder->getServiceIds(); $serviceIds = array_filter($serviceIds, [$this, 'filterToServiceTypes']); if ($search = $input->getArgument('search')) { $serviceIds = array_filter($serviceIds, function ($serviceId) use ($search) { return false !== stripos($serviceId, $search); }); if (empty($serviceIds)) { $errorIo->error(sprintf('No autowirable classes or interfaces found matching "%s"', $search)); return 1; } } asort($serviceIds); $io->title('Autowirable Services'); $io->text('The following classes & interfaces can be used as type-hints when autowiring:'); if ($search) { $io->text(sprintf('(only showing classes/interfaces matching %s)', $search)); } $io->newLine(); $tableRows = []; foreach ($serviceIds as $serviceId) { $tableRows[] = [sprintf('%s', $serviceId)]; if ($builder->hasAlias($serviceId)) { $tableRows[] = [sprintf(' alias to %s', $builder->getAlias($serviceId))]; } } $io->table([], $tableRows); return null; } }