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

Breadcrumb

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

class CommandDataCollector

@internal

@author Jules Pietri <jules@heahprod.com>

Hierarchy

  • class \Symfony\Component\HttpKernel\DataCollector\DataCollector implements \Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface
    • class \Symfony\Component\Console\DataCollector\CommandDataCollector extends \Symfony\Component\HttpKernel\DataCollector\DataCollector

Expanded class hierarchy of CommandDataCollector

File

vendor/symfony/console/DataCollector/CommandDataCollector.php, line 28

Namespace

Symfony\Component\Console\DataCollector
View source
final class CommandDataCollector extends DataCollector {
    public function collect(Request $request, Response $response, ?\Throwable $exception = null) : void {
        if (!$request instanceof CliRequest) {
            return;
        }
        $command = $request->command;
        $application = $command->getApplication();
        $this->data = [
            'command' => $this->cloneVar($command->command),
            'exit_code' => $command->exitCode,
            'interrupted_by_signal' => $command->interruptedBySignal,
            'duration' => $command->duration,
            'max_memory_usage' => $command->maxMemoryUsage,
            'verbosity_level' => match ($command->output
                ->getVerbosity()) {    OutputInterface::VERBOSITY_QUIET => 'quiet',
                OutputInterface::VERBOSITY_NORMAL => 'normal',
                OutputInterface::VERBOSITY_VERBOSE => 'verbose',
                OutputInterface::VERBOSITY_VERY_VERBOSE => 'very verbose',
                OutputInterface::VERBOSITY_DEBUG => 'debug',
            
            },
            'interactive' => $command->isInteractive,
            'validate_input' => !$command->ignoreValidation,
            'enabled' => $command->isEnabled(),
            'visible' => !$command->isHidden(),
            'input' => $this->cloneVar($command->input),
            'output' => $this->cloneVar($command->output),
            'interactive_inputs' => array_map($this->cloneVar(...), $command->interactiveInputs),
            'signalable' => $command->getSubscribedSignals(),
            'handled_signals' => $command->handledSignals,
            'helper_set' => array_map($this->cloneVar(...), iterator_to_array($command->getHelperSet())),
        ];
        $baseDefinition = $application->getDefinition();
        foreach ($command->arguments as $argName => $argValue) {
            if ($baseDefinition->hasArgument($argName)) {
                $this->data['application_inputs'][$argName] = $this->cloneVar($argValue);
            }
            else {
                $this->data['arguments'][$argName] = $this->cloneVar($argValue);
            }
        }
        foreach ($command->options as $optName => $optValue) {
            if ($baseDefinition->hasOption($optName)) {
                $this->data['application_inputs']['--' . $optName] = $this->cloneVar($optValue);
            }
            else {
                $this->data['options'][$optName] = $this->cloneVar($optValue);
            }
        }
    }
    public function getName() : string {
        return 'command';
    }
    
    /**
     * @return array{
     *     class?: class-string,
     *     executor?: string,
     *     file: string,
     *     line: int,
     * }
     */
    public function getCommand() : array {
        $class = $this->data['command']
            ->getType();
        $r = new \ReflectionMethod($class, 'execute');
        if (Command::class !== $r->getDeclaringClass()) {
            return [
                'executor' => $class . '::' . $r->name,
                'file' => $r->getFileName(),
                'line' => $r->getStartLine(),
            ];
        }
        $r = new \ReflectionClass($class);
        return [
            'class' => $class,
            'file' => $r->getFileName(),
            'line' => $r->getStartLine(),
        ];
    }
    public function getInterruptedBySignal() : ?string {
        if (isset($this->data['interrupted_by_signal'])) {
            return \sprintf('%s (%d)', SignalMap::getSignalName($this->data['interrupted_by_signal']), $this->data['interrupted_by_signal']);
        }
        return null;
    }
    public function getDuration() : string {
        return $this->data['duration'];
    }
    public function getMaxMemoryUsage() : string {
        return $this->data['max_memory_usage'];
    }
    public function getVerbosityLevel() : string {
        return $this->data['verbosity_level'];
    }
    public function getInteractive() : bool {
        return $this->data['interactive'];
    }
    public function getValidateInput() : bool {
        return $this->data['validate_input'];
    }
    public function getEnabled() : bool {
        return $this->data['enabled'];
    }
    public function getVisible() : bool {
        return $this->data['visible'];
    }
    public function getInput() : Data {
        return $this->data['input'];
    }
    public function getOutput() : Data {
        return $this->data['output'];
    }
    
    /**
     * @return Data[]
     */
    public function getArguments() : array {
        return $this->data['arguments'] ?? [];
    }
    
    /**
     * @return Data[]
     */
    public function getOptions() : array {
        return $this->data['options'] ?? [];
    }
    
    /**
     * @return Data[]
     */
    public function getApplicationInputs() : array {
        return $this->data['application_inputs'] ?? [];
    }
    
    /**
     * @return Data[]
     */
    public function getInteractiveInputs() : array {
        return $this->data['interactive_inputs'] ?? [];
    }
    public function getSignalable() : array {
        return array_map(static fn(int $signal): string => \sprintf('%s (%d)', SignalMap::getSignalName($signal), $signal), $this->data['signalable']);
    }
    public function getHandledSignals() : array {
        $keys = array_map(static fn(int $signal): string => \sprintf('%s (%d)', SignalMap::getSignalName($signal), $signal), array_keys($this->data['handled_signals']));
        return array_combine($keys, array_values($this->data['handled_signals']));
    }
    
    /**
     * @return Data[]
     */
    public function getHelperSet() : array {
        return $this->data['helper_set'] ?? [];
    }
    public function reset() : void {
        $this->data = [];
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
CommandDataCollector::collect public function Collects data for the given Request and Response. Overrides DataCollectorInterface::collect
CommandDataCollector::getApplicationInputs public function
CommandDataCollector::getArguments public function
CommandDataCollector::getCommand public function
CommandDataCollector::getDuration public function
CommandDataCollector::getEnabled public function
CommandDataCollector::getHandledSignals public function
CommandDataCollector::getHelperSet public function
CommandDataCollector::getInput public function
CommandDataCollector::getInteractive public function
CommandDataCollector::getInteractiveInputs public function
CommandDataCollector::getInterruptedBySignal public function
CommandDataCollector::getMaxMemoryUsage public function
CommandDataCollector::getName public function Returns the name of the collector. Overrides DataCollectorInterface::getName
CommandDataCollector::getOptions public function
CommandDataCollector::getOutput public function
CommandDataCollector::getSignalable public function
CommandDataCollector::getValidateInput public function
CommandDataCollector::getVerbosityLevel public function
CommandDataCollector::getVisible public function
CommandDataCollector::reset public function Overrides DataCollector::reset
DataCollector::$cloner private property
DataCollector::$data protected property
DataCollector::cloneVar protected function Converts the variable into a serializable Data instance.
DataCollector::getCasters protected function 1
DataCollector::serialize final protected function @internal to prevent implementing \Serializable
DataCollector::unserialize final protected function @internal to prevent implementing \Serializable
DataCollector::__sleep public function 1
DataCollector::__wakeup public function 1

API Navigation

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