container = $container; parent::__construct(); } protected function configure(): void { $this ->setDescription('List services available in Extensions'); } protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); $rows = []; $reflectedContainer = new \ReflectionClass($this->container); $reflectionProperty = $reflectedContainer->getProperty('services'); $reflectionProperty->setAccessible(true); $publicServices = $reflectionProperty->getValue($this->container); foreach ($publicServices as $id => $name) { $rows[] = [$id, get_class($name)]; } $reflectionProperty = $reflectedContainer->getProperty('privates'); $reflectionProperty->setAccessible(true); $privateServices = $reflectionProperty->getValue($this->container); $io->text('Publicly accessible Services (' . count($rows) . '):'); $io->table(['Service ID', 'Class name / Alias'], $rows); $rows = []; foreach ($privateServices as $id => $name) { $rows[] = [$id, get_class($name)]; } $io->text('Private Services (' . count($rows) . '):'); $io->table(['Service ID', 'Class name / Alias'], $rows); return 0; } }