/** * Checks if the value is a UUID or an array but should be an object, i.e. * the argument's data type class schema is set. If that is the case, this * method tries to look up the corresponding object instead. * * Additionally, it maps arrays to objects in case it is a normal object. * * @param mixed $value The value of an argument * @throws \TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentValueException * @return mixed * @deprecated since Extbase 1.4.0, will be removed two versions after Extbase 6.1 */ protected function transformValue($value) { if (!class_exists($this->dataType)) { return $value; } $transformedValue = NULL; if ($this->dataTypeClassSchema !== NULL) { // The target object is an Entity or ValueObject. if (is_numeric($value)) { $this->origin = self::ORIGIN_PERSISTENCE; $transformedValue = $this->findObjectByUid($value); } elseif (is_array($value)) { $this->origin = self::ORIGIN_PERSISTENCE_AND_MODIFIED; $transformedValue = $this->deprecatedPropertyMapper->map(array_keys($value), $value, $this->dataType); } } else { if (!is_array($value)) { throw new \TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentValueException('The value was a simple type, so we could not map it to an object. Maybe the @entity or @valueobject annotations are missing?', 1251730701); } $this->origin = self::ORIGIN_NEWLY_CREATED; $transformedValue = $this->deprecatedPropertyMapper->map(array_keys($value), $value, $this->dataType); } if (!$transformedValue instanceof $this->dataType && ($transformedValue !== NULL || $this->isRequired())) { throw new \TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentValueException('The value must be of type "' . $this->dataType . '", but was of type "' . (is_object($transformedValue) ? get_class($transformedValue) : gettype($transformedValue)) . '".' . ($this->deprecatedPropertyMapper->getMappingResults()->hasErrors() ? '<p>' . implode('<br />', $this->deprecatedPropertyMapper->getMappingResults()->getErrors()) . '</p>' : ''), 1251730702); } return $transformedValue; }
/** * Maps arguments delivered by the request object to the local controller arguments. * * @throws Exception\RequiredArgumentMissingException * @return void */ protected function mapRequestArgumentsToControllerArguments() { if ($this->configurationManager->isFeatureEnabled('rewrittenPropertyMapper')) { foreach ($this->arguments as $argument) { $argumentName = $argument->getName(); if ($this->request->hasArgument($argumentName)) { $argument->setValue($this->request->getArgument($argumentName)); } elseif ($argument->isRequired()) { throw new \TYPO3\CMS\Extbase\Mvc\Controller\Exception\RequiredArgumentMissingException('Required argument "' . $argumentName . '" is not set for ' . $this->request->getControllerObjectName() . '->' . $this->request->getControllerActionName() . '.', 1298012500); } } } else { // @deprecated since Extbase 1.4, will be removed two versions after Extbase 6.1 $optionalPropertyNames = array(); $allPropertyNames = $this->arguments->getArgumentNames(); foreach ($allPropertyNames as $propertyName) { if ($this->arguments[$propertyName]->isRequired() === FALSE) { $optionalPropertyNames[] = $propertyName; } } /** @var $validator ArgumentsValidator */ $validator = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ArgumentsValidator'); $this->deprecatedPropertyMapper->mapAndValidate($allPropertyNames, $this->request->getArguments(), $this->arguments, $optionalPropertyNames, $validator); $this->argumentsMappingResults = $this->deprecatedPropertyMapper->getMappingResults(); } }