Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ApplicationDescription.php

class ApplicationDescription

@author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>

@internal

Hierarchy

  • class \Symfony\Component\Console\Descriptor\ApplicationDescription

Expanded class hierarchy of ApplicationDescription

2 files declare their use of ApplicationDescription
HelpCommand.php in vendor/symfony/console/Command/HelpCommand.php
ListCommand.php in vendor/symfony/console/Command/ListCommand.php

File

vendor/symfony/console/Descriptor/ApplicationDescription.php, line 23

Namespace

Symfony\Component\Console\Descriptor
View source
class ApplicationDescription {
    public const GLOBAL_NAMESPACE = '_global';
    private array $namespaces;
    
    /**
     * @var array<string, Command>
     */
    private array $commands;
    
    /**
     * @var array<string, Command>
     */
    private array $aliases = [];
    public function __construct(Application $application, ?string $namespace = null, bool $showHidden = false) {
    }
    public function getNamespaces() : array {
        if (!isset($this->namespaces)) {
            $this->inspectApplication();
        }
        return $this->namespaces;
    }
    
    /**
     * @return Command[]
     */
    public function getCommands() : array {
        if (!isset($this->commands)) {
            $this->inspectApplication();
        }
        return $this->commands;
    }
    
    /**
     * @throws CommandNotFoundException
     */
    public function getCommand(string $name) : Command {
        if (!isset($this->commands[$name]) && !isset($this->aliases[$name])) {
            throw new CommandNotFoundException(\sprintf('Command "%s" does not exist.', $name));
        }
        return $this->commands[$name] ?? $this->aliases[$name];
    }
    private function inspectApplication() : void {
        $this->commands = [];
        $this->namespaces = [];
        $all = $this->application
            ->all($this->namespace ? $this->application
            ->findNamespace($this->namespace) : null);
        foreach ($this->sortCommands($all) as $namespace => $commands) {
            $names = [];
            
            /** @var Command $command */
            foreach ($commands as $name => $command) {
                if (!$command->getName() || !$this->showHidden && $command->isHidden()) {
                    continue;
                }
                if ($command->getName() === $name) {
                    $this->commands[$name] = $command;
                }
                else {
                    $this->aliases[$name] = $command;
                }
                $names[] = $name;
            }
            $this->namespaces[$namespace] = [
                'id' => $namespace,
                'commands' => $names,
            ];
        }
    }
    private function sortCommands(array $commands) : array {
        $namespacedCommands = [];
        $globalCommands = [];
        $sortedCommands = [];
        foreach ($commands as $name => $command) {
            $key = $this->application
                ->extractNamespace($name, 1);
            if (\in_array($key, [
                '',
                self::GLOBAL_NAMESPACE,
            ], true)) {
                $globalCommands[$name] = $command;
            }
            else {
                $namespacedCommands[$key][$name] = $command;
            }
        }
        if ($globalCommands) {
            ksort($globalCommands);
            $sortedCommands[self::GLOBAL_NAMESPACE] = $globalCommands;
        }
        if ($namespacedCommands) {
            ksort($namespacedCommands, \SORT_STRING);
            foreach ($namespacedCommands as $key => $commandsSet) {
                ksort($commandsSet);
                $sortedCommands[$key] = $commandsSet;
            }
        }
        return $sortedCommands;
    }

}

Members

Title Sort descending Modifiers Object type Summary
ApplicationDescription::$aliases private property
ApplicationDescription::$commands private property
ApplicationDescription::$namespaces private property
ApplicationDescription::getCommand public function
ApplicationDescription::getCommands public function
ApplicationDescription::getNamespaces public function
ApplicationDescription::GLOBAL_NAMESPACE public constant
ApplicationDescription::inspectApplication private function
ApplicationDescription::sortCommands private function
ApplicationDescription::__construct public function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal