TYPO3 CMS  TYPO3_6-2
Arguments.php
Go to the documentation of this file.
1 <?php
3 
19 class Arguments extends \ArrayObject {
20 
25  protected $objectManager;
26 
30  protected $argumentNames = array();
31 
35  protected $argumentShortNames = array();
36 
40  public function __construct() {
41  parent::__construct();
42  }
43 
53  public function offsetSet($offset, $value) {
54  if (!$value instanceof \TYPO3\CMS\Extbase\Mvc\Controller\Argument) {
55  throw new \InvalidArgumentException('Controller arguments must be valid TYPO3\\CMS\\Extbase\\Mvc\\Controller\\Argument objects.', 1187953786);
56  }
57  $argumentName = $value->getName();
58  parent::offsetSet($argumentName, $value);
59  $this->argumentNames[$argumentName] = TRUE;
60  }
61 
69  public function append($value) {
70  if (!$value instanceof \TYPO3\CMS\Extbase\Mvc\Controller\Argument) {
71  throw new \InvalidArgumentException('Controller arguments must be valid TYPO3\\CMS\\Extbase\\Mvc\\Controller\\Argument objects.', 1187953787);
72  }
73  $this->offsetSet(NULL, $value);
74  }
75 
82  public function offsetUnset($offset) {
83  $translatedOffset = $this->translateToLongArgumentName($offset);
84  parent::offsetUnset($translatedOffset);
85  unset($this->argumentNames[$translatedOffset]);
86  if ($offset != $translatedOffset) {
87  unset($this->argumentShortNames[$offset]);
88  }
89  }
90 
97  public function offsetExists($offset) {
98  $translatedOffset = $this->translateToLongArgumentName($offset);
99  return parent::offsetExists($translatedOffset);
100  }
101 
109  public function offsetGet($offset) {
110  $translatedOffset = $this->translateToLongArgumentName($offset);
111  if ($translatedOffset === '') {
112  throw new \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException('The argument "' . $offset . '" does not exist.', 1216909923);
113  }
114  return parent::offsetGet($translatedOffset);
115  }
116 
128  public function addNewArgument($name, $dataType = 'Text', $isRequired = FALSE, $defaultValue = NULL) {
130  $argument = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\Argument', $name, $dataType);
131  $argument->setRequired($isRequired);
132  $argument->setDefaultValue($defaultValue);
133  $this->addArgument($argument);
134  return $argument;
135  }
136 
147  public function addArgument(\TYPO3\CMS\Extbase\Mvc\Controller\Argument $argument) {
148  $this->offsetSet(NULL, $argument);
149  }
150 
158  public function getArgument($argumentName) {
159  if (!$this->offsetExists($argumentName)) {
160  throw new \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException('An argument "' . $argumentName . '" does not exist.', 1195815178);
161  }
162  return $this->offsetGet($argumentName);
163  }
164 
172  public function hasArgument($argumentName) {
173  return $this->offsetExists($argumentName);
174  }
175 
181  public function getArgumentNames() {
182  return array_keys($this->argumentNames);
183  }
184 
190  public function getArgumentShortNames() {
191  $argumentShortNames = array();
192  foreach ($this as $argument) {
193  $argumentShortNames[$argument->getShortName()] = TRUE;
194  }
195  return array_keys($argumentShortNames);
196  }
197 
207  public function __call($methodName, array $arguments) {
208  if (substr($methodName, 0, 3) !== 'set') {
209  throw new \LogicException('Unknown method "' . $methodName . '".', 1210858451);
210  }
211  $firstLowerCaseArgumentName = $this->translateToLongArgumentName(strtolower($methodName[3]) . substr($methodName, 4));
212  $firstUpperCaseArgumentName = $this->translateToLongArgumentName(ucfirst(substr($methodName, 3)));
213  if (in_array($firstLowerCaseArgumentName, $this->getArgumentNames())) {
214  $argument = parent::offsetGet($firstLowerCaseArgumentName);
215  $argument->setValue($arguments[0]);
216  } elseif (in_array($firstUpperCaseArgumentName, $this->getArgumentNames())) {
217  $argument = parent::offsetGet($firstUpperCaseArgumentName);
218  $argument->setValue($arguments[0]);
219  }
220  }
221 
232  protected function translateToLongArgumentName($argumentName) {
233  if (in_array($argumentName, $this->getArgumentNames())) {
234  return $argumentName;
235  }
236  foreach ($this as $argument) {
237  if ($argumentName === $argument->getShortName()) {
238  return $argument->getName();
239  }
240  }
241  return '';
242  }
243 
249  public function removeAll() {
250  foreach ($this->argumentNames as $argumentName => $booleanValue) {
251  parent::offsetUnset($argumentName);
252  }
253  $this->argumentNames = array();
254  }
255 
261  public function getValidationResults() {
262  $results = new \TYPO3\CMS\Extbase\Error\Result();
263  foreach ($this as $argument) {
264  $argumentValidationResults = $argument->getValidationResults();
265  if ($argumentValidationResults === NULL) {
266  continue;
267  }
268  $results->forProperty($argument->getName())->merge($argumentValidationResults);
269  }
270  return $results;
271  }
272 }
addArgument(\TYPO3\CMS\Extbase\Mvc\Controller\Argument $argument)
Definition: Arguments.php:147
__call($methodName, array $arguments)
Definition: Arguments.php:207