‪TYPO3CMS  ‪main
FormViewHelper.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Psr\Http\Message\ServerRequestInterface;
35 
71 {
75  protected ‪$tagName = 'form';
76 
81 
86  protected array ‪$formActionUriArguments = [];
87 
89  {
90  $this->hashService = ‪$hashService;
91  }
92 
94  {
95  $this->mvcPropertyMappingConfigurationService = ‪$mvcPropertyMappingConfigurationService;
96  }
97 
99  {
100  $this->extensionService = ‪$extensionService;
101  }
102 
104  {
105  $this->configurationManager = ‪$configurationManager;
106  }
107 
108  public function ‪initializeArguments(): void
109  {
110  parent::initializeArguments();
111  $this->registerArgument('action', 'string', 'Target action');
112  $this->registerArgument('arguments', 'array', 'Arguments', false, []);
113  $this->registerArgument('controller', 'string', 'Target controller');
114  $this->registerArgument('extensionName', 'string', 'Target Extension Name (without `tx_` prefix and no underscores). If NULL the current extension name is used');
115  $this->registerArgument('pluginName', 'string', 'Target plugin. If empty, the current plugin name is used');
116  $this->registerArgument('pageUid', 'int', 'Target page uid');
117  $this->registerArgument('object', 'mixed', 'Object to use for the form. Use in conjunction with the "property" attribute on the sub tags');
118  $this->registerArgument('pageType', 'int', 'Target page type', false, 0);
119  $this->registerArgument('noCache', 'bool', 'set this to disable caching for the target page. You should not need this.', false, false);
120  $this->registerArgument('section', 'string', 'The anchor to be added to the action URI (only active if $actionUri is not set)', false, '');
121  $this->registerArgument('format', 'string', 'The requested format (e.g. ".html") of the target page (only active if $actionUri is not set)', false, '');
122  $this->registerArgument('additionalParams', 'array', 'additional action URI query parameters that won\'t be prefixed like $arguments (overrule $arguments) (only active if $actionUri is not set)', false, []);
123  $this->registerArgument('absolute', 'bool', 'If set, an absolute action URI is rendered (only active if $actionUri is not set)', false, false);
124  $this->registerArgument('addQueryString', 'string', 'If set, the current query parameters will be kept in the URL. If set to "untrusted", then ALL query parameters will be added. Be aware, that this might lead to problems when the generated link is cached.', false, false);
125  $this->registerArgument('argumentsToBeExcludedFromQueryString', 'array', 'arguments to be removed from the action URI. Only active if $addQueryString = TRUE and $actionUri is not set', false, []);
126  $this->registerArgument('fieldNamePrefix', 'string', 'Prefix that will be added to all field names within this form. If not set the prefix will be tx_yourExtension_plugin');
127  $this->registerArgument('actionUri', 'string', 'can be used to overwrite the "action" attribute of the form tag');
128  $this->registerArgument('objectName', 'string', 'name of the object that is bound to this form. If this argument is not specified, the name attribute of this form is used to determine the FormObjectName');
129  $this->registerArgument('hiddenFieldClassName', 'string', 'hiddenFieldClassName');
130  $this->registerArgument('requestToken', 'mixed', 'whether to add that request token to the form');
131  $this->registerArgument('signingType', 'string', 'which signing type to be used on the request token (falls back to "nonce")');
132  $this->registerTagAttribute('enctype', 'string', 'MIME type with which the form is submitted');
133  $this->registerTagAttribute('method', 'string', 'Transfer type (get or post)', false, 'post');
134  $this->registerTagAttribute('name', 'string', 'Name of form');
135  $this->registerTagAttribute('onreset', 'string', 'JavaScript: On reset of the form');
136  $this->registerTagAttribute('onsubmit', 'string', 'JavaScript: On submit of the form');
137  $this->registerTagAttribute('target', 'string', 'Target attribute of the form');
138  $this->registerTagAttribute('novalidate', 'bool', 'Indicate that the form is not to be validated on submit.');
139  $this->registerUniversalTagAttributes();
140  }
141 
142  public function ‪render(): string
143  {
145  $renderingContext = $this->renderingContext;
146  $request = $renderingContext->getRequest();
147  if (!$request instanceof ‪RequestInterface) {
148  throw new \RuntimeException(
149  'ViewHelper f:form can be used only in extbase context and needs a request implementing extbase RequestInterface.',
150  1639821904
151  );
152  }
153 
154  $this->‪setFormActionUri();
155 
156  // Force 'method="get"' or 'method="post"', defaulting to "post".
157  if (isset($this->arguments['method']) && strtolower($this->arguments['method']) === 'get') {
158  $this->tag->addAttribute('method', 'get');
159  } else {
160  $this->tag->addAttribute('method', 'post');
161  }
162 
163  if (isset($this->arguments['novalidate']) && $this->arguments['novalidate'] === true) {
164  $this->tag->addAttribute('novalidate', 'novalidate');
165  }
166 
171 
172  $formContent = $this->renderChildren();
173 
174  if (isset($this->arguments['hiddenFieldClassName']) && $this->arguments['hiddenFieldClassName'] !== null) {
175  $content = LF . '<div class="' . htmlspecialchars($this->arguments['hiddenFieldClassName']) . '">';
176  } else {
177  $content = LF . '<div>';
178  }
179 
180  $content .= $this->‪renderHiddenIdentityField($this->arguments['object'] ?? null, $this->‪getFormObjectName());
181  $content .= $this->‪renderAdditionalIdentityFields();
182  $content .= $this->‪renderHiddenReferrerFields();
183  $content .= $this->‪renderRequestTokenHiddenField();
184 
185  // Render the trusted list of all properties after everything else has been rendered
186  $content .= $this->‪renderTrustedPropertiesField();
187 
188  $content .= LF . '</div>' . LF;
189  $content .= $formContent;
190  $this->tag->setContent($content);
196  return $this->tag->render();
197  }
198 
202  protected function ‪setFormActionUri(): void
203  {
204  if ($this->hasArgument('actionUri')) {
205  $formActionUri = $this->arguments['actionUri'];
206  } else {
208  $renderingContext = $this->renderingContext;
210  $request = $renderingContext->getRequest();
211  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
212  $uriBuilder
213  ->reset()
214  ->setRequest($request)
215  ->setTargetPageType((int)($this->arguments['pageType'] ?? 0))
216  ->setNoCache((bool)($this->arguments['noCache'] ?? false))
217  ->setSection($this->arguments['section'] ?? '')
218  ->setCreateAbsoluteUri((bool)($this->arguments['absolute'] ?? false))
219  ->setArguments(isset($this->arguments['additionalParams']) ? (array)$this->arguments['additionalParams'] : [])
220  ->setAddQueryString($this->arguments['addQueryString'] ?? false)
221  ->setArgumentsToBeExcludedFromQueryString(isset($this->arguments['argumentsToBeExcludedFromQueryString']) ? (array)$this->arguments['argumentsToBeExcludedFromQueryString'] : [])
222  ->setFormat($this->arguments['format'] ?? '')
223  ;
224 
225  $pageUid = (int)($this->arguments['pageUid'] ?? 0);
226  if ($pageUid > 0) {
227  $uriBuilder->setTargetPageUid($pageUid);
228  }
229 
230  $formActionUri = $uriBuilder->uriFor(
231  $this->arguments['action'] ?? null,
232  $this->arguments['arguments'] ?? [],
233  $this->arguments['controller'] ?? null,
234  $this->arguments['extensionName'] ?? null,
235  $this->arguments['pluginName'] ?? null
236  );
237  $this->formActionUriArguments = $uriBuilder->getArguments();
238  }
239  $this->tag->addAttribute('action', $formActionUri);
240  }
241 
248  protected function ‪renderAdditionalIdentityFields(): string
249  {
250  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
251  if ($viewHelperVariableContainer->exists(FormViewHelper::class, 'additionalIdentityProperties')) {
252  $additionalIdentityProperties = $viewHelperVariableContainer->get(FormViewHelper::class, 'additionalIdentityProperties');
253  ‪$output = '';
254  foreach ($additionalIdentityProperties as $identity) {
255  ‪$output .= LF . $identity;
256  }
257  return ‪$output;
258  }
259  return '';
260  }
261 
269  protected function ‪renderHiddenReferrerFields(): string
270  {
272  $renderingContext = $this->renderingContext;
274  $request = $renderingContext->getRequest();
275  $extensionName = $request->getControllerExtensionName();
276  $controllerName = $request->getControllerName();
277  $actionName = $request->getControllerActionName();
278  $actionRequest = [
279  '@extension' => $extensionName,
280  '@controller' => $controllerName,
281  '@action' => $actionName,
282  ];
283 
284  $result = LF;
285  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[@extension]')) . '" value="' . htmlspecialchars((string)$extensionName) . '" />' . LF;
286  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[@controller]')) . '" value="' . htmlspecialchars((string)$controllerName) . '" />' . LF;
287  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[@action]')) . '" value="' . htmlspecialchars((string)$actionName) . '" />' . LF;
288  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[arguments]')) . '" value="' . htmlspecialchars($this->hashService->appendHmac(base64_encode(serialize($request->getArguments())))) . '" />' . LF;
289  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[@request]')) . '" value="' . htmlspecialchars($this->hashService->appendHmac(json_encode($actionRequest))) . '" />' . LF;
290 
291  return $result;
292  }
293 
297  protected function ‪addFormObjectNameToViewHelperVariableContainer(): void
298  {
299  $formObjectName = $this->‪getFormObjectName();
300  if ($formObjectName !== null) {
301  $this->renderingContext->getViewHelperVariableContainer()->add(FormViewHelper::class, 'formObjectName', $formObjectName);
302  }
303  }
304 
309  {
310  $formObjectName = $this->‪getFormObjectName();
311  if ($formObjectName !== null) {
312  $this->renderingContext->getViewHelperVariableContainer()->remove(FormViewHelper::class, 'formObjectName');
313  }
314  }
315 
323  protected function ‪getFormObjectName(): ?string
324  {
325  $formObjectName = null;
326  if ($this->hasArgument('objectName')) {
327  $formObjectName = $this->arguments['objectName'];
328  } elseif ($this->hasArgument('name')) {
329  $formObjectName = $this->arguments['name'];
330  }
331  return $formObjectName;
332  }
333 
337  protected function ‪addFormObjectToViewHelperVariableContainer(): void
338  {
339  if ($this->hasArgument('object')) {
340  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
341  $viewHelperVariableContainer->add(FormViewHelper::class, 'formObject', $this->arguments['object']);
342  $viewHelperVariableContainer->add(FormViewHelper::class, 'additionalIdentityProperties', []);
343  }
344  }
345 
349  protected function ‪removeFormObjectFromViewHelperVariableContainer(): void
350  {
351  if ($this->hasArgument('object')) {
352  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
353  $viewHelperVariableContainer->remove(FormViewHelper::class, 'formObject');
354  $viewHelperVariableContainer->remove(FormViewHelper::class, 'additionalIdentityProperties');
355  }
356  }
357 
361  protected function ‪addFieldNamePrefixToViewHelperVariableContainer(): void
362  {
363  $fieldNamePrefix = $this->‪getFieldNamePrefix();
364  $this->renderingContext->getViewHelperVariableContainer()->add(FormViewHelper::class, 'fieldNamePrefix', $fieldNamePrefix);
365  }
366 
367  protected function ‪getFieldNamePrefix(): string
368  {
369  if ($this->hasArgument('fieldNamePrefix')) {
370  return $this->arguments['fieldNamePrefix'];
371  }
372  return $this->‪getDefaultFieldNamePrefix();
373  }
374 
379  {
380  $this->renderingContext->getViewHelperVariableContainer()->remove(FormViewHelper::class, 'fieldNamePrefix');
381  }
382 
386  protected function ‪addFormFieldNamesToViewHelperVariableContainer(): void
387  {
388  $this->renderingContext->getViewHelperVariableContainer()->add(FormViewHelper::class, 'formFieldNames', []);
389  }
390 
395  {
396  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
397  $viewHelperVariableContainer->remove(FormViewHelper::class, 'formFieldNames');
398  if ($viewHelperVariableContainer->exists(FormViewHelper::class, 'renderedHiddenFields')) {
399  $viewHelperVariableContainer->remove(FormViewHelper::class, 'renderedHiddenFields');
400  }
401  }
402 
406  protected function ‪getDefaultFieldNamePrefix(): string
407  {
409  $renderingContext = $this->renderingContext;
411  $request = $renderingContext->getRequest();
412  // Backend URLs do not have a prefix
413  if ($request instanceof ServerRequestInterface
414  && $request->getAttribute('applicationType')
415  && ‪ApplicationType::fromRequest($request)->isBackend()
416  ) {
417  return '';
418  }
419  if ($this->hasArgument('extensionName')) {
420  $extensionName = $this->arguments['extensionName'];
421  } else {
422  $extensionName = $request->getControllerExtensionName();
423  }
424  if ($this->hasArgument('pluginName')) {
425  $pluginName = $this->arguments['pluginName'];
426  } else {
427  $pluginName = $request->getPluginName();
428  }
429  if ($extensionName !== null && $pluginName != null) {
430  return $this->extensionService->getPluginNamespace($extensionName, $pluginName);
431  }
432  return '';
433  }
434 
439  {
440  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
441  if ($viewHelperVariableContainer->exists(CheckboxViewHelper::class, 'checkboxFieldNames')) {
442  $viewHelperVariableContainer->remove(CheckboxViewHelper::class, 'checkboxFieldNames');
443  }
444  }
445 
449  protected function ‪renderTrustedPropertiesField(): string
450  {
451  $formFieldNames = $this->renderingContext->getViewHelperVariableContainer()->get(FormViewHelper::class, 'formFieldNames');
452  $requestHash = $this->mvcPropertyMappingConfigurationService->generateTrustedPropertiesToken($formFieldNames, $this->‪getFieldNamePrefix());
453  return '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__trustedProperties')) . '" value="' . htmlspecialchars($requestHash) . '" />';
454  }
455 
456  protected function ‪renderRequestTokenHiddenField(): string
457  {
458  $requestToken = $this->arguments['requestToken'] ?? null;
459  $signingType = $this->arguments['signingType'] ?? null;
460 
461  $isTrulyRequestToken = is_int($requestToken) && $requestToken === 1
462  || is_string($requestToken) && strtolower($requestToken) === 'true';
463  $formAction = $this->tag->getAttribute('action');
464 
465  // basically "request token, yes" - uses form-action URI as scope
466  if ($isTrulyRequestToken || $requestToken === '@nonce') {
467  $requestToken = ‪RequestToken::create($formAction);
468  // basically "request token with 'my-scope'" - uses 'my-scope'
469  } elseif (is_string($requestToken) && $requestToken !== '') {
470  $requestToken = ‪RequestToken::create($requestToken);
471  }
472  if (!$requestToken instanceof ‪RequestToken) {
473  return '';
474  }
475  if (strtolower((string)($this->arguments['method'] ?? '')) === 'get') {
476  throw new \LogicException('Cannot apply request token for forms sent via HTTP GET', 1651775963);
477  }
478 
479  $context = GeneralUtility::makeInstance(Context::class);
480  $securityAspect = ‪SecurityAspect::provideIn($context);
481  // @todo currently defaults to 'nonce', there might be a better strategy in the future
482  $signingType = $signingType ?: 'nonce';
483  $signingProvider = $securityAspect->getSigningSecretResolver()->findByType($signingType);
484  if ($signingProvider === null) {
485  throw new \LogicException(sprintf('Cannot find request token signing type "%s"', $signingType), 1664260307);
486  }
487 
488  $signingSecret = $signingProvider->provideSigningSecret();
489  $requestToken = $requestToken->withMergedParams(['request' => ['uri' => $formAction]]);
490 
491  $attrs = [
492  'type' => 'hidden',
493  'name' => ‪RequestToken::PARAM_NAME,
494  'value' => $requestToken->toHashSignedJwt($signingSecret),
495  ];
496  return '<input ' . GeneralUtility::implodeAttributes($attrs, true) . '/>';
497  }
498 }
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\initializeArguments
‪initializeArguments()
Definition: FormViewHelper.php:107
‪TYPO3\CMS\Core\Context\SecurityAspect\provideIn
‪static provideIn(Context $context)
Definition: SecurityAspect.php:41
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\renderHiddenReferrerFields
‪string renderHiddenReferrerFields()
Definition: FormViewHelper.php:268
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\addFormFieldNamesToViewHelperVariableContainer
‪addFormFieldNamesToViewHelperVariableContainer()
Definition: FormViewHelper.php:385
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\removeCheckboxFieldNamesFromViewHelperVariableContainer
‪removeCheckboxFieldNamesFromViewHelperVariableContainer()
Definition: FormViewHelper.php:437
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$hashService
‪HashService $hashService
Definition: FormViewHelper.php:76
‪TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder
Definition: UriBuilder.php:38
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\renderRequestTokenHiddenField
‪renderRequestTokenHiddenField()
Definition: FormViewHelper.php:455
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\setFormActionUri
‪setFormActionUri()
Definition: FormViewHelper.php:201
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\injectConfigurationManager
‪injectConfigurationManager(ConfigurationManagerInterface $configurationManager)
Definition: FormViewHelper.php:102
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\injectHashService
‪injectHashService(HashService $hashService)
Definition: FormViewHelper.php:87
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\injectMvcPropertyMappingConfigurationService
‪injectMvcPropertyMappingConfigurationService(MvcPropertyMappingConfigurationService $mvcPropertyMappingConfigurationService)
Definition: FormViewHelper.php:92
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
Definition: ConfigurationManagerInterface.php:28
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$extensionService
‪ExtensionService $extensionService
Definition: FormViewHelper.php:78
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\renderAdditionalIdentityFields
‪string renderAdditionalIdentityFields()
Definition: FormViewHelper.php:247
‪TYPO3\CMS\Extbase\Security\Cryptography\HashService
Definition: HashService.php:31
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:54
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\removeFormFieldNamesFromViewHelperVariableContainer
‪removeFormFieldNamesFromViewHelperVariableContainer()
Definition: FormViewHelper.php:393
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\injectExtensionService
‪injectExtensionService(ExtensionService $extensionService)
Definition: FormViewHelper.php:97
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$mvcPropertyMappingConfigurationService
‪MvcPropertyMappingConfigurationService $mvcPropertyMappingConfigurationService
Definition: FormViewHelper.php:77
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper
Definition: FormViewHelper.php:71
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\addFormObjectNameToViewHelperVariableContainer
‪addFormObjectNameToViewHelperVariableContainer()
Definition: FormViewHelper.php:296
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\getFormObjectName
‪string getFormObjectName()
Definition: FormViewHelper.php:322
‪TYPO3\CMS\Core\Security\RequestToken
Definition: RequestToken.php:26
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\addFieldNamePrefixToViewHelperVariableContainer
‪addFieldNamePrefixToViewHelperVariableContainer()
Definition: FormViewHelper.php:360
‪TYPO3\CMS\Core\Context\SecurityAspect
Definition: SecurityAspect.php:30
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\removeFormObjectNameFromViewHelperVariableContainer
‪removeFormObjectNameFromViewHelperVariableContainer()
Definition: FormViewHelper.php:307
‪TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewHelper\renderHiddenIdentityField
‪string renderHiddenIdentityField(?object $object, ?string $name)
Definition: AbstractFormViewHelper.php:75
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\removeFormObjectFromViewHelperVariableContainer
‪removeFormObjectFromViewHelperVariableContainer()
Definition: FormViewHelper.php:348
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$configurationManager
‪ConfigurationManagerInterface $configurationManager
Definition: FormViewHelper.php:79
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$tagName
‪string $tagName
Definition: FormViewHelper.php:74
‪TYPO3\CMS\Fluid\ViewHelpers
‪$output
‪$output
Definition: annotationChecker.php:119
‪TYPO3\CMS\Core\Security\RequestToken\PARAM_NAME
‪const PARAM_NAME
Definition: RequestToken.php:28
‪TYPO3\CMS\Extbase\Mvc\RequestInterface
Definition: RequestInterface.php:24
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$formActionUriArguments
‪array $formActionUriArguments
Definition: FormViewHelper.php:85
‪TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewHelper
Definition: AbstractFormViewHelper.php:35
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\render
‪render()
Definition: FormViewHelper.php:141
‪TYPO3\CMS\Fluid\ViewHelpers\Form\CheckboxViewHelper
Definition: CheckboxViewHelper.php:64
‪TYPO3\CMS\Extbase\Service\ExtensionService
Definition: ExtensionService.php:34
‪TYPO3\CMS\Extbase\Mvc\Controller\MvcPropertyMappingConfigurationService
Definition: MvcPropertyMappingConfigurationService.php:50
‪TYPO3\CMS\Core\Http\fromRequest
‪@ fromRequest
Definition: ApplicationType.php:67
‪TYPO3\CMS\Core\Security\RequestToken\create
‪static create(string $scope)
Definition: RequestToken.php:43
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\renderTrustedPropertiesField
‪renderTrustedPropertiesField()
Definition: FormViewHelper.php:448
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:51
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\addFormObjectToViewHelperVariableContainer
‪addFormObjectToViewHelperVariableContainer()
Definition: FormViewHelper.php:336
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContext
Definition: RenderingContext.php:35
‪TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewHelper\prefixFieldName
‪prefixFieldName(string $fieldName)
Definition: AbstractFormViewHelper.php:46
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\removeFieldNamePrefixFromViewHelperVariableContainer
‪removeFieldNamePrefixFromViewHelperVariableContainer()
Definition: FormViewHelper.php:377
‪TYPO3\CMS\Core\Http\ApplicationType
‪ApplicationType
Definition: ApplicationType.php:56
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\getDefaultFieldNamePrefix
‪getDefaultFieldNamePrefix()
Definition: FormViewHelper.php:405
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\getFieldNamePrefix
‪getFieldNamePrefix()
Definition: FormViewHelper.php:366