InputDefinition.php in Zircon Profile 8
File
vendor/symfony/console/Input/InputDefinition.php
View source
<?php
namespace Symfony\Component\Console\Input;
use Symfony\Component\Console\Descriptor\TextDescriptor;
use Symfony\Component\Console\Descriptor\XmlDescriptor;
use Symfony\Component\Console\Output\BufferedOutput;
class InputDefinition {
private $arguments;
private $requiredCount;
private $hasAnArrayArgument = false;
private $hasOptional;
private $options;
private $shortcuts;
public function __construct(array $definition = array()) {
$this
->setDefinition($definition);
}
public function setDefinition(array $definition) {
$arguments = array();
$options = array();
foreach ($definition as $item) {
if ($item instanceof InputOption) {
$options[] = $item;
}
else {
$arguments[] = $item;
}
}
$this
->setArguments($arguments);
$this
->setOptions($options);
}
public function setArguments($arguments = array()) {
$this->arguments = array();
$this->requiredCount = 0;
$this->hasOptional = false;
$this->hasAnArrayArgument = false;
$this
->addArguments($arguments);
}
public function addArguments($arguments = array()) {
if (null !== $arguments) {
foreach ($arguments as $argument) {
$this
->addArgument($argument);
}
}
}
public function addArgument(InputArgument $argument) {
if (isset($this->arguments[$argument
->getName()])) {
throw new \LogicException(sprintf('An argument with name "%s" already exists.', $argument
->getName()));
}
if ($this->hasAnArrayArgument) {
throw new \LogicException('Cannot add an argument after an array argument.');
}
if ($argument
->isRequired() && $this->hasOptional) {
throw new \LogicException('Cannot add a required argument after an optional one.');
}
if ($argument
->isArray()) {
$this->hasAnArrayArgument = true;
}
if ($argument
->isRequired()) {
++$this->requiredCount;
}
else {
$this->hasOptional = true;
}
$this->arguments[$argument
->getName()] = $argument;
}
public function getArgument($name) {
if (!$this
->hasArgument($name)) {
throw new \InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name));
}
$arguments = is_int($name) ? array_values($this->arguments) : $this->arguments;
return $arguments[$name];
}
public function hasArgument($name) {
$arguments = is_int($name) ? array_values($this->arguments) : $this->arguments;
return isset($arguments[$name]);
}
public function getArguments() {
return $this->arguments;
}
public function getArgumentCount() {
return $this->hasAnArrayArgument ? PHP_INT_MAX : count($this->arguments);
}
public function getArgumentRequiredCount() {
return $this->requiredCount;
}
public function getArgumentDefaults() {
$values = array();
foreach ($this->arguments as $argument) {
$values[$argument
->getName()] = $argument
->getDefault();
}
return $values;
}
public function setOptions($options = array()) {
$this->options = array();
$this->shortcuts = array();
$this
->addOptions($options);
}
public function addOptions($options = array()) {
foreach ($options as $option) {
$this
->addOption($option);
}
}
public function addOption(InputOption $option) {
if (isset($this->options[$option
->getName()]) && !$option
->equals($this->options[$option
->getName()])) {
throw new \LogicException(sprintf('An option named "%s" already exists.', $option
->getName()));
}
if ($option
->getShortcut()) {
foreach (explode('|', $option
->getShortcut()) as $shortcut) {
if (isset($this->shortcuts[$shortcut]) && !$option
->equals($this->options[$this->shortcuts[$shortcut]])) {
throw new \LogicException(sprintf('An option with shortcut "%s" already exists.', $shortcut));
}
}
}
$this->options[$option
->getName()] = $option;
if ($option
->getShortcut()) {
foreach (explode('|', $option
->getShortcut()) as $shortcut) {
$this->shortcuts[$shortcut] = $option
->getName();
}
}
}
public function getOption($name) {
if (!$this
->hasOption($name)) {
throw new \InvalidArgumentException(sprintf('The "--%s" option does not exist.', $name));
}
return $this->options[$name];
}
public function hasOption($name) {
return isset($this->options[$name]);
}
public function getOptions() {
return $this->options;
}
public function hasShortcut($name) {
return isset($this->shortcuts[$name]);
}
public function getOptionForShortcut($shortcut) {
return $this
->getOption($this
->shortcutToName($shortcut));
}
public function getOptionDefaults() {
$values = array();
foreach ($this->options as $option) {
$values[$option
->getName()] = $option
->getDefault();
}
return $values;
}
private function shortcutToName($shortcut) {
if (!isset($this->shortcuts[$shortcut])) {
throw new \InvalidArgumentException(sprintf('The "-%s" option does not exist.', $shortcut));
}
return $this->shortcuts[$shortcut];
}
public function getSynopsis($short = false) {
$elements = array();
if ($short && $this
->getOptions()) {
$elements[] = '[options]';
}
elseif (!$short) {
foreach ($this
->getOptions() as $option) {
$value = '';
if ($option
->acceptValue()) {
$value = sprintf(' %s%s%s', $option
->isValueOptional() ? '[' : '', strtoupper($option
->getName()), $option
->isValueOptional() ? ']' : '');
}
$shortcut = $option
->getShortcut() ? sprintf('-%s|', $option
->getShortcut()) : '';
$elements[] = sprintf('[%s--%s%s]', $shortcut, $option
->getName(), $value);
}
}
if (count($elements) && $this
->getArguments()) {
$elements[] = '[--]';
}
foreach ($this
->getArguments() as $argument) {
$element = '<' . $argument
->getName() . '>';
if (!$argument
->isRequired()) {
$element = '[' . $element . ']';
}
elseif ($argument
->isArray()) {
$element = $element . ' (' . $element . ')';
}
if ($argument
->isArray()) {
$element .= '...';
}
$elements[] = $element;
}
return implode(' ', $elements);
}
public function asText() {
@trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
$descriptor = new TextDescriptor();
$output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true);
$descriptor
->describe($output, $this, array(
'raw_output' => true,
));
return $output
->fetch();
}
public function asXml($asDom = false) {
@trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
$descriptor = new XmlDescriptor();
if ($asDom) {
return $descriptor
->getInputDefinitionDocument($this);
}
$output = new BufferedOutput();
$descriptor
->describe($output, $this);
return $output
->fetch();
}
}
Classes
Name |
Description |
InputDefinition |
A InputDefinition represents a set of valid command line arguments and options. |