46 parent::initializeArguments();
49 $this->
registerArgument(
'property',
'string',
'Name of Object Property. If used in conjunction with <f:form object="...">, "name" and "value" properties will be ignored.');
72 $formObjectName = $this->viewHelperVariableContainer->get(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'formObjectName');
73 if (!empty($formObjectName)) {
74 $propertySegments = explode(
'.', $this->arguments[
'property']);
76 foreach ($propertySegments as $segment) {
77 $propertyPath .=
'[' . $segment .
']';
79 $name = $formObjectName . $propertyPath;
81 $name = $this->arguments[
'property'];
84 $name = $this->arguments[
'name'];
86 if ($this->
hasArgument(
'value') && is_object($this->arguments[
'value'])) {
88 if (NULL !== $this->persistenceManager->getIdentifierByObject($this->arguments[
'value'])) {
89 $name .=
'[__identity]';
102 protected function getValue($convertObjects = TRUE) {
105 $value = $this->arguments[
'value'];
106 } elseif ($this->configurationManager->isFeatureEnabled(
'rewrittenPropertyMapper') && $this->
hasMappingErrorOccurred()) {
109 } elseif ($this->
isObjectAccessorMode() && $this->viewHelperVariableContainer->exists(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'formObject')) {
113 if ($convertObjects) {
126 if (is_object($value)) {
127 $identifier = $this->persistenceManager->getIdentifierByObject($value);
128 if ($identifier !== NULL) {
129 $value = $identifier;
141 return $this->controllerContext->getRequest()->getOriginalRequest() !== NULL;
151 $propertyPath = rtrim(preg_replace(
'/(\\]\\[|\\[|\\])/',
'.', $this->
getNameWithoutPrefix()),
'.');
163 $propertySegments = explode(
'.', $this->arguments[
'property']);
164 if (count($propertySegments) >= 2) {
166 $formObject = $this->viewHelperVariableContainer->get(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'formObject');
167 $objectName = $this->viewHelperVariableContainer->get(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'formObjectName');
169 for ($i = 1; $i < count($propertySegments); $i++) {
171 $objectName .=
'[' . $propertySegments[($i - 1)] .
']';
174 $additionalIdentityProperties = $this->viewHelperVariableContainer->get(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'additionalIdentityProperties');
175 $additionalIdentityProperties[$objectName] = $hiddenIdentityField;
176 $this->viewHelperVariableContainer->addOrUpdate(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'additionalIdentityProperties', $additionalIdentityProperties);
187 if (!$this->viewHelperVariableContainer->exists(
'TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper',
'formObject')) {
190 $formObject = $this->viewHelperVariableContainer->get(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'formObject');
191 $propertyName = $this->arguments[
'property'];
192 if (is_array($formObject)) {
193 return isset($formObject[$propertyName]) ? $formObject[$propertyName] : NULL;
195 return \TYPO3\CMS\Extbase\Reflection\ObjectAccess::getPropertyPath($formObject, $propertyName);
204 return $this->
hasArgument(
'property') && $this->viewHelperVariableContainer->exists(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'formObjectName');
214 $cssClass = $this->arguments[
'class'] .
' ';
218 if ($this->configurationManager->isFeatureEnabled(
'rewrittenPropertyMapper')) {
220 if ($mappingResultsForProperty->hasErrors()) {
222 $cssClass .= $this->arguments[
'errorClass'];
224 $cssClass .=
'error';
226 $this->tag->addAttribute(
'class', $cssClass);
231 if (count($errors) > 0) {
233 $cssClass .= $this->arguments[
'errorClass'];
235 $cssClass .=
'error';
237 $this->tag->addAttribute(
'class', $cssClass);
249 return new \TYPO3\CMS\Extbase\Error\Result();
251 $originalRequestMappingResults = $this->controllerContext->getRequest()->getOriginalRequestMappingResults();
252 $formObjectName = $this->viewHelperVariableContainer->get(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'formObjectName');
253 return $originalRequestMappingResults->forProperty($formObjectName)->forProperty($this->arguments[
'property']);
266 $errors = $this->controllerContext->getRequest()->getErrors();
267 $formObjectName = $this->viewHelperVariableContainer->get(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'formObjectName');
268 $propertyName = $this->arguments[
'property'];
269 foreach ($errors as $error) {
270 if ($error instanceof \
TYPO3\CMS\Extbase\Validation\PropertyError && $error->getPropertyName() === $formObjectName) {
271 $formErrors = $error->getErrors();
272 foreach ($formErrors as $formError) {
273 if ($formError instanceof \
TYPO3\CMS\Extbase\Validation\PropertyError && $formError->getPropertyName() === $propertyName) {
274 return $formError->getErrors();
289 $hiddenFieldNames = array();
290 if ($this->viewHelperVariableContainer->exists(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'renderedHiddenFields')) {
291 $hiddenFieldNames = $this->viewHelperVariableContainer->get(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'renderedHiddenFields');
294 if (substr($fieldName, -2) ===
'[]') {
295 $fieldName = substr($fieldName, 0, -2);
297 if (!in_array($fieldName, $hiddenFieldNames)) {
298 $hiddenFieldNames[] = $fieldName;
299 $this->viewHelperVariableContainer->addOrUpdate(
'TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
'renderedHiddenFields', $hiddenFieldNames);
300 return '<input type="hidden" name="' . htmlspecialchars($fieldName) .
'" value="" />';
hasArgument($argumentName)
registerArgument($name, $type, $description, $required=FALSE, $defaultValue=NULL)
static getPropertyPath($subject, $propertyPath)