class ConsoleInputCollector
Collects input values for recipes from the command line.
@internal This API is experimental.
Hierarchy
- class \Drupal\Core\Recipe\ConsoleInputCollector implements \Drupal\Core\Recipe\InputCollectorInterface
Expanded class hierarchy of ConsoleInputCollector
1 file declares its use of ConsoleInputCollector
- InputTest.php in core/
tests/ Drupal/ KernelTests/ Core/ Recipe/ InputTest.php
File
-
core/
lib/ Drupal/ Core/ Recipe/ ConsoleInputCollector.php, line 20
Namespace
Drupal\Core\RecipeView source
final class ConsoleInputCollector implements InputCollectorInterface {
/**
* The name of the command-line option for passing input values.
*
* @var string
*/
public const INPUT_OPTION = 'input';
public function __construct(InputInterface $input, StyleInterface $io) {
}
/**
* Configures a console command to support the `--input` option.
*
* This should be called by a command's configure() method.
*
* @param \Symfony\Component\Console\Command\Command $command
* The command being configured.
*/
public static function configureCommand(Command $command) : void {
$command->addOption(static::INPUT_OPTION, 'i', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, sprintf('An input value to pass to the recipe or one of its dependencies, in the form `--%s=RECIPE_NAME.INPUT_NAME=VALUE`.', static::INPUT_OPTION), []);
}
/**
* Returns the `--input` options passed to the command.
*
* @return string[]
* The values from the `--input` options passed to the command, keyed by
* fully qualified name (i.e., prefixed with the name of their defining
* recipe).
*/
private function getInputFromOptions() : array {
$options = [];
try {
foreach ($this->input
->getOption(static::INPUT_OPTION) ?? [] as $option) {
[
$key,
$value,
] = explode('=', $option, 2);
$options[$key] = $value;
}
} catch (InvalidArgumentException) {
// The option is undefined; there's nothing we need to do.
}
return $options;
}
/**
* {@inheritdoc}
*/
public function collectValue(string $name, DataDefinitionInterface $definition, mixed $default_value) : mixed {
$option_values = $this->getInputFromOptions();
// If the value was passed as a `--input` option, return that.
if (array_key_exists($name, $option_values)) {
return $option_values[$name];
}
/** @var array{method: string, arguments?: array<mixed>}|null $settings */
$settings = $definition->getSetting('prompt');
// If there's no information on how to prompt the user, there's nothing else
// for us to do; return the default value.
if (empty($settings)) {
return $default_value;
}
$method = $settings['method'];
$arguments = $settings['arguments'] ?? [];
// Most of the input-collecting methods of StyleInterface have a `default`
// parameter.
$arguments += [
'default' => $default_value,
];
// We don't support using Symfony Console's inline validation; instead,
// input definitions should define constraints.
unset($arguments['validator']);
return $this->io
->{$method}(...$arguments);
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
ConsoleInputCollector::collectValue | public | function | Overrides InputCollectorInterface::collectValue | |
ConsoleInputCollector::configureCommand | public static | function | Configures a console command to support the `--input` option. | |
ConsoleInputCollector::getInputFromOptions | private | function | Returns the `--input` options passed to the command. | |
ConsoleInputCollector::INPUT_OPTION | public | constant | The name of the command-line option for passing input values. | |
ConsoleInputCollector::__construct | public | function |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.