annotate vendor/symfony/console/Input/Input.php @ 2:92f882872392

Trusted hosts, + remove migration modules
author Chris Cannam
date Tue, 05 Dec 2017 09:26:43 +0000
parents 4c8ae668cc8c
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\Console\Input;
Chris@0 13
Chris@0 14 use Symfony\Component\Console\Exception\InvalidArgumentException;
Chris@0 15 use Symfony\Component\Console\Exception\RuntimeException;
Chris@0 16
Chris@0 17 /**
Chris@0 18 * Input is the base class for all concrete Input classes.
Chris@0 19 *
Chris@0 20 * Three concrete classes are provided by default:
Chris@0 21 *
Chris@0 22 * * `ArgvInput`: The input comes from the CLI arguments (argv)
Chris@0 23 * * `StringInput`: The input is provided as a string
Chris@0 24 * * `ArrayInput`: The input is provided as an array
Chris@0 25 *
Chris@0 26 * @author Fabien Potencier <fabien@symfony.com>
Chris@0 27 */
Chris@0 28 abstract class Input implements InputInterface, StreamableInputInterface
Chris@0 29 {
Chris@0 30 /**
Chris@0 31 * @var InputDefinition
Chris@0 32 */
Chris@0 33 protected $definition;
Chris@0 34 protected $stream;
Chris@0 35 protected $options = array();
Chris@0 36 protected $arguments = array();
Chris@0 37 protected $interactive = true;
Chris@0 38
Chris@0 39 /**
Chris@0 40 * Constructor.
Chris@0 41 *
Chris@0 42 * @param InputDefinition|null $definition A InputDefinition instance
Chris@0 43 */
Chris@0 44 public function __construct(InputDefinition $definition = null)
Chris@0 45 {
Chris@0 46 if (null === $definition) {
Chris@0 47 $this->definition = new InputDefinition();
Chris@0 48 } else {
Chris@0 49 $this->bind($definition);
Chris@0 50 $this->validate();
Chris@0 51 }
Chris@0 52 }
Chris@0 53
Chris@0 54 /**
Chris@0 55 * {@inheritdoc}
Chris@0 56 */
Chris@0 57 public function bind(InputDefinition $definition)
Chris@0 58 {
Chris@0 59 $this->arguments = array();
Chris@0 60 $this->options = array();
Chris@0 61 $this->definition = $definition;
Chris@0 62
Chris@0 63 $this->parse();
Chris@0 64 }
Chris@0 65
Chris@0 66 /**
Chris@0 67 * Processes command line arguments.
Chris@0 68 */
Chris@0 69 abstract protected function parse();
Chris@0 70
Chris@0 71 /**
Chris@0 72 * {@inheritdoc}
Chris@0 73 */
Chris@0 74 public function validate()
Chris@0 75 {
Chris@0 76 $definition = $this->definition;
Chris@0 77 $givenArguments = $this->arguments;
Chris@0 78
Chris@0 79 $missingArguments = array_filter(array_keys($definition->getArguments()), function ($argument) use ($definition, $givenArguments) {
Chris@0 80 return !array_key_exists($argument, $givenArguments) && $definition->getArgument($argument)->isRequired();
Chris@0 81 });
Chris@0 82
Chris@0 83 if (count($missingArguments) > 0) {
Chris@0 84 throw new RuntimeException(sprintf('Not enough arguments (missing: "%s").', implode(', ', $missingArguments)));
Chris@0 85 }
Chris@0 86 }
Chris@0 87
Chris@0 88 /**
Chris@0 89 * {@inheritdoc}
Chris@0 90 */
Chris@0 91 public function isInteractive()
Chris@0 92 {
Chris@0 93 return $this->interactive;
Chris@0 94 }
Chris@0 95
Chris@0 96 /**
Chris@0 97 * {@inheritdoc}
Chris@0 98 */
Chris@0 99 public function setInteractive($interactive)
Chris@0 100 {
Chris@0 101 $this->interactive = (bool) $interactive;
Chris@0 102 }
Chris@0 103
Chris@0 104 /**
Chris@0 105 * {@inheritdoc}
Chris@0 106 */
Chris@0 107 public function getArguments()
Chris@0 108 {
Chris@0 109 return array_merge($this->definition->getArgumentDefaults(), $this->arguments);
Chris@0 110 }
Chris@0 111
Chris@0 112 /**
Chris@0 113 * {@inheritdoc}
Chris@0 114 */
Chris@0 115 public function getArgument($name)
Chris@0 116 {
Chris@0 117 if (!$this->definition->hasArgument($name)) {
Chris@0 118 throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name));
Chris@0 119 }
Chris@0 120
Chris@0 121 return isset($this->arguments[$name]) ? $this->arguments[$name] : $this->definition->getArgument($name)->getDefault();
Chris@0 122 }
Chris@0 123
Chris@0 124 /**
Chris@0 125 * {@inheritdoc}
Chris@0 126 */
Chris@0 127 public function setArgument($name, $value)
Chris@0 128 {
Chris@0 129 if (!$this->definition->hasArgument($name)) {
Chris@0 130 throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name));
Chris@0 131 }
Chris@0 132
Chris@0 133 $this->arguments[$name] = $value;
Chris@0 134 }
Chris@0 135
Chris@0 136 /**
Chris@0 137 * {@inheritdoc}
Chris@0 138 */
Chris@0 139 public function hasArgument($name)
Chris@0 140 {
Chris@0 141 return $this->definition->hasArgument($name);
Chris@0 142 }
Chris@0 143
Chris@0 144 /**
Chris@0 145 * {@inheritdoc}
Chris@0 146 */
Chris@0 147 public function getOptions()
Chris@0 148 {
Chris@0 149 return array_merge($this->definition->getOptionDefaults(), $this->options);
Chris@0 150 }
Chris@0 151
Chris@0 152 /**
Chris@0 153 * {@inheritdoc}
Chris@0 154 */
Chris@0 155 public function getOption($name)
Chris@0 156 {
Chris@0 157 if (!$this->definition->hasOption($name)) {
Chris@0 158 throw new InvalidArgumentException(sprintf('The "%s" option does not exist.', $name));
Chris@0 159 }
Chris@0 160
Chris@0 161 return isset($this->options[$name]) ? $this->options[$name] : $this->definition->getOption($name)->getDefault();
Chris@0 162 }
Chris@0 163
Chris@0 164 /**
Chris@0 165 * {@inheritdoc}
Chris@0 166 */
Chris@0 167 public function setOption($name, $value)
Chris@0 168 {
Chris@0 169 if (!$this->definition->hasOption($name)) {
Chris@0 170 throw new InvalidArgumentException(sprintf('The "%s" option does not exist.', $name));
Chris@0 171 }
Chris@0 172
Chris@0 173 $this->options[$name] = $value;
Chris@0 174 }
Chris@0 175
Chris@0 176 /**
Chris@0 177 * {@inheritdoc}
Chris@0 178 */
Chris@0 179 public function hasOption($name)
Chris@0 180 {
Chris@0 181 return $this->definition->hasOption($name);
Chris@0 182 }
Chris@0 183
Chris@0 184 /**
Chris@0 185 * Escapes a token through escapeshellarg if it contains unsafe chars.
Chris@0 186 *
Chris@0 187 * @param string $token
Chris@0 188 *
Chris@0 189 * @return string
Chris@0 190 */
Chris@0 191 public function escapeToken($token)
Chris@0 192 {
Chris@0 193 return preg_match('{^[\w-]+$}', $token) ? $token : escapeshellarg($token);
Chris@0 194 }
Chris@0 195
Chris@0 196 /**
Chris@0 197 * {@inheritdoc}
Chris@0 198 */
Chris@0 199 public function setStream($stream)
Chris@0 200 {
Chris@0 201 $this->stream = $stream;
Chris@0 202 }
Chris@0 203
Chris@0 204 /**
Chris@0 205 * {@inheritdoc}
Chris@0 206 */
Chris@0 207 public function getStream()
Chris@0 208 {
Chris@0 209 return $this->stream;
Chris@0 210 }
Chris@0 211 }