‪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;
36 
72 {
76  protected ‪$tagName = 'form';
77 
82 
87  protected array ‪$formActionUriArguments = [];
88 
90  {
91  $this->hashService = ‪$hashService;
92  }
93 
95  {
96  $this->mvcPropertyMappingConfigurationService = ‪$mvcPropertyMappingConfigurationService;
97  }
98 
100  {
101  $this->extensionService = ‪$extensionService;
102  }
103 
105  {
106  $this->configurationManager = ‪$configurationManager;
107  }
108 
109  public function ‪initializeArguments(): void
110  {
111  parent::initializeArguments();
112  $this->registerArgument('action', 'string', 'Target action');
113  $this->registerArgument('arguments', 'array', 'Arguments', false, []);
114  $this->registerArgument('controller', 'string', 'Target controller');
115  $this->registerArgument('extensionName', 'string', 'Target Extension Name (without `tx_` prefix and no underscores). If NULL the current extension name is used');
116  $this->registerArgument('pluginName', 'string', 'Target plugin. If empty, the current plugin name is used');
117  $this->registerArgument('pageUid', 'int', 'Target page uid');
118  $this->registerArgument('object', 'mixed', 'Object to use for the form. Use in conjunction with the "property" attribute on the sub tags');
119  $this->registerArgument('pageType', 'int', 'Target page type', false, 0);
120  $this->registerArgument('noCache', 'bool', 'set this to disable caching for the target page. You should not need this.', false, false);
121  $this->registerArgument('section', 'string', 'The anchor to be added to the action URI (only active if $actionUri is not set)', false, '');
122  $this->registerArgument('format', 'string', 'The requested format (e.g. ".html") of the target page (only active if $actionUri is not set)', false, '');
123  $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, []);
124  $this->registerArgument('absolute', 'bool', 'If set, an absolute action URI is rendered (only active if $actionUri is not set)', false, false);
125  $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);
126  $this->registerArgument('argumentsToBeExcludedFromQueryString', 'array', 'arguments to be removed from the action URI. Only active if $addQueryString = TRUE and $actionUri is not set', false, []);
127  $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');
128  $this->registerArgument('actionUri', 'string', 'can be used to overwrite the "action" attribute of the form tag');
129  $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');
130  $this->registerArgument('hiddenFieldClassName', 'string', 'hiddenFieldClassName');
131  $this->registerArgument('requestToken', 'mixed', 'whether to add that request token to the form');
132  $this->registerArgument('signingType', 'string', 'which signing type to be used on the request token (falls back to "nonce")');
133  $this->registerTagAttribute('enctype', 'string', 'MIME type with which the form is submitted');
134  $this->registerTagAttribute('method', 'string', 'Transfer type (get or post)', false, 'post');
135  $this->registerTagAttribute('name', 'string', 'Name of form');
136  $this->registerTagAttribute('onreset', 'string', 'JavaScript: On reset of the form');
137  $this->registerTagAttribute('onsubmit', 'string', 'JavaScript: On submit of the form');
138  $this->registerTagAttribute('target', 'string', 'Target attribute of the form');
139  $this->registerTagAttribute('novalidate', 'bool', 'Indicate that the form is not to be validated on submit.');
140  $this->registerUniversalTagAttributes();
141  }
142 
143  public function ‪render(): string
144  {
146  $renderingContext = $this->renderingContext;
147  $request = $renderingContext->getRequest();
148  if (!$request instanceof ‪RequestInterface) {
149  throw new \RuntimeException(
150  'ViewHelper f:form can be used only in extbase context and needs a request implementing extbase RequestInterface.',
151  1639821904
152  );
153  }
154 
155  $this->‪setFormActionUri();
156 
157  // Force 'method="get"' or 'method="post"', defaulting to "post".
158  if (isset($this->arguments['method']) && strtolower($this->arguments['method']) === 'get') {
159  $this->tag->addAttribute('method', 'get');
160  } else {
161  $this->tag->addAttribute('method', 'post');
162  }
163 
164  if (isset($this->arguments['novalidate']) && $this->arguments['novalidate'] === true) {
165  $this->tag->addAttribute('novalidate', 'novalidate');
166  }
167 
172 
173  $formContent = $this->renderChildren();
174 
175  if (isset($this->arguments['hiddenFieldClassName']) && $this->arguments['hiddenFieldClassName'] !== null) {
176  $content = LF . '<div class="' . htmlspecialchars($this->arguments['hiddenFieldClassName']) . '">';
177  } else {
178  $content = LF . '<div>';
179  }
180 
181  $content .= $this->‪renderHiddenIdentityField($this->arguments['object'] ?? null, $this->‪getFormObjectName());
182  $content .= $this->‪renderAdditionalIdentityFields();
183  $content .= $this->‪renderHiddenReferrerFields();
184  $content .= $this->‪renderRequestTokenHiddenField();
185 
186  // Render the trusted list of all properties after everything else has been rendered
187  $content .= $this->‪renderTrustedPropertiesField();
188 
189  $content .= LF . '</div>' . LF;
190  $content .= $formContent;
191  $this->tag->setContent($content);
197  return $this->tag->render();
198  }
199 
203  protected function ‪setFormActionUri(): void
204  {
205  if ($this->hasArgument('actionUri')) {
206  $formActionUri = $this->arguments['actionUri'];
207  } else {
209  $renderingContext = $this->renderingContext;
211  $request = $renderingContext->getRequest();
212  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
213  $uriBuilder
214  ->reset()
215  ->setRequest($request)
216  ->setTargetPageType((int)($this->arguments['pageType'] ?? 0))
217  ->setNoCache((bool)($this->arguments['noCache'] ?? false))
218  ->setSection($this->arguments['section'] ?? '')
219  ->setCreateAbsoluteUri((bool)($this->arguments['absolute'] ?? false))
220  ->setArguments(isset($this->arguments['additionalParams']) ? (array)$this->arguments['additionalParams'] : [])
221  ->setAddQueryString($this->arguments['addQueryString'] ?? false)
222  ->setArgumentsToBeExcludedFromQueryString(isset($this->arguments['argumentsToBeExcludedFromQueryString']) ? (array)$this->arguments['argumentsToBeExcludedFromQueryString'] : [])
223  ->setFormat($this->arguments['format'] ?? '')
224  ;
225 
226  $pageUid = (int)($this->arguments['pageUid'] ?? 0);
227  if ($pageUid > 0) {
228  $uriBuilder->setTargetPageUid($pageUid);
229  }
230 
231  $formActionUri = $uriBuilder->uriFor(
232  $this->arguments['action'] ?? null,
233  $this->arguments['arguments'] ?? [],
234  $this->arguments['controller'] ?? null,
235  $this->arguments['extensionName'] ?? null,
236  $this->arguments['pluginName'] ?? null
237  );
238  $this->formActionUriArguments = $uriBuilder->getArguments();
239  }
240  $this->tag->addAttribute('action', $formActionUri);
241  }
242 
249  protected function ‪renderAdditionalIdentityFields(): string
250  {
251  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
252  if ($viewHelperVariableContainer->exists(FormViewHelper::class, 'additionalIdentityProperties')) {
253  $additionalIdentityProperties = $viewHelperVariableContainer->get(FormViewHelper::class, 'additionalIdentityProperties');
254  ‪$output = '';
255  foreach ($additionalIdentityProperties as $identity) {
256  ‪$output .= LF . $identity;
257  }
258  return ‪$output;
259  }
260  return '';
261  }
262 
270  protected function ‪renderHiddenReferrerFields(): string
271  {
273  $renderingContext = $this->renderingContext;
275  $request = $renderingContext->getRequest();
276  $extensionName = $request->getControllerExtensionName();
277  $controllerName = $request->getControllerName();
278  $actionName = $request->getControllerActionName();
279  $actionRequest = [
280  '@extension' => $extensionName,
281  '@controller' => $controllerName,
282  '@action' => $actionName,
283  ];
284 
285  $result = LF;
286  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[@extension]')) . '" value="' . htmlspecialchars((string)$extensionName) . '" />' . LF;
287  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[@controller]')) . '" value="' . htmlspecialchars((string)$controllerName) . '" />' . LF;
288  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[@action]')) . '" value="' . htmlspecialchars((string)$actionName) . '" />' . LF;
289  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[arguments]')) . '" value="' . htmlspecialchars($this->hashService->appendHmac(base64_encode(serialize($request->getArguments())), HashScope::ReferringArguments->prefix())) . '" />' . LF;
290  $result .= '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__referrer[@request]')) . '" value="' . htmlspecialchars($this->hashService->appendHmac(json_encode($actionRequest), HashScope::ReferringRequest->‪prefix())) . '" />' . LF;
291 
292  return $result;
293  }
294 
298  protected function ‪addFormObjectNameToViewHelperVariableContainer(): void
299  {
300  $formObjectName = $this->‪getFormObjectName();
301  if ($formObjectName !== null) {
302  $this->renderingContext->getViewHelperVariableContainer()->add(FormViewHelper::class, 'formObjectName', $formObjectName);
303  }
304  }
305 
310  {
311  $formObjectName = $this->‪getFormObjectName();
312  if ($formObjectName !== null) {
313  $this->renderingContext->getViewHelperVariableContainer()->remove(FormViewHelper::class, 'formObjectName');
314  }
315  }
316 
324  protected function ‪getFormObjectName(): ?string
325  {
326  $formObjectName = null;
327  if ($this->hasArgument('objectName')) {
328  $formObjectName = $this->arguments['objectName'];
329  } elseif ($this->hasArgument('name')) {
330  $formObjectName = $this->arguments['name'];
331  }
332  return $formObjectName;
333  }
334 
338  protected function ‪addFormObjectToViewHelperVariableContainer(): void
339  {
340  if ($this->hasArgument('object')) {
341  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
342  $viewHelperVariableContainer->add(FormViewHelper::class, 'formObject', $this->arguments['object']);
343  $viewHelperVariableContainer->add(FormViewHelper::class, 'additionalIdentityProperties', []);
344  }
345  }
346 
350  protected function ‪removeFormObjectFromViewHelperVariableContainer(): void
351  {
352  if ($this->hasArgument('object')) {
353  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
354  $viewHelperVariableContainer->remove(FormViewHelper::class, 'formObject');
355  $viewHelperVariableContainer->remove(FormViewHelper::class, 'additionalIdentityProperties');
356  }
357  }
358 
362  protected function ‪addFieldNamePrefixToViewHelperVariableContainer(): void
363  {
364  $fieldNamePrefix = $this->‪getFieldNamePrefix();
365  $this->renderingContext->getViewHelperVariableContainer()->add(FormViewHelper::class, 'fieldNamePrefix', $fieldNamePrefix);
366  }
367 
368  protected function ‪getFieldNamePrefix(): string
369  {
370  if ($this->hasArgument('fieldNamePrefix')) {
371  return $this->arguments['fieldNamePrefix'];
372  }
373  return $this->‪getDefaultFieldNamePrefix();
374  }
375 
380  {
381  $this->renderingContext->getViewHelperVariableContainer()->remove(FormViewHelper::class, 'fieldNamePrefix');
382  }
383 
387  protected function ‪addFormFieldNamesToViewHelperVariableContainer(): void
388  {
389  $this->renderingContext->getViewHelperVariableContainer()->add(FormViewHelper::class, 'formFieldNames', []);
390  }
391 
396  {
397  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
398  $viewHelperVariableContainer->remove(FormViewHelper::class, 'formFieldNames');
399  if ($viewHelperVariableContainer->exists(FormViewHelper::class, 'renderedHiddenFields')) {
400  $viewHelperVariableContainer->remove(FormViewHelper::class, 'renderedHiddenFields');
401  }
402  }
403 
407  protected function ‪getDefaultFieldNamePrefix(): string
408  {
410  $renderingContext = $this->renderingContext;
412  $request = $renderingContext->getRequest();
413  // Backend URLs do not have a prefix
414  if ($request instanceof ServerRequestInterface
415  && $request->getAttribute('applicationType')
416  && ‪ApplicationType::fromRequest($request)->isBackend()
417  ) {
418  return '';
419  }
420  if ($this->hasArgument('extensionName')) {
421  $extensionName = $this->arguments['extensionName'];
422  } else {
423  $extensionName = $request->getControllerExtensionName();
424  }
425  if ($this->hasArgument('pluginName')) {
426  $pluginName = $this->arguments['pluginName'];
427  } else {
428  $pluginName = $request->getPluginName();
429  }
430  if ($extensionName !== null && $pluginName != null) {
431  return $this->extensionService->getPluginNamespace($extensionName, $pluginName);
432  }
433  return '';
434  }
435 
440  {
441  $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
442  if ($viewHelperVariableContainer->exists(CheckboxViewHelper::class, 'checkboxFieldNames')) {
443  $viewHelperVariableContainer->remove(CheckboxViewHelper::class, 'checkboxFieldNames');
444  }
445  }
446 
450  protected function ‪renderTrustedPropertiesField(): string
451  {
452  $formFieldNames = $this->renderingContext->getViewHelperVariableContainer()->get(FormViewHelper::class, 'formFieldNames');
453  $requestHash = $this->mvcPropertyMappingConfigurationService->generateTrustedPropertiesToken($formFieldNames, $this->‪getFieldNamePrefix());
454  return '<input type="hidden" name="' . htmlspecialchars($this->‪prefixFieldName('__trustedProperties')) . '" value="' . htmlspecialchars($requestHash) . '" />';
455  }
456 
457  protected function ‪renderRequestTokenHiddenField(): string
458  {
459  $requestToken = $this->arguments['requestToken'] ?? null;
460  $signingType = $this->arguments['signingType'] ?? null;
461 
462  $isTrulyRequestToken = is_int($requestToken) && $requestToken === 1
463  || is_string($requestToken) && strtolower($requestToken) === 'true';
464  $formAction = $this->tag->getAttribute('action');
465 
466  // basically "request token, yes" - uses form-action URI as scope
467  if ($isTrulyRequestToken || $requestToken === '@nonce') {
468  $requestToken = ‪RequestToken::create($formAction);
469  } elseif (is_string($requestToken) && $requestToken !== '') {
470  // basically "request token with 'my-scope'" - uses 'my-scope'
471  $requestToken = ‪RequestToken::create($requestToken);
472  }
473  if (!$requestToken instanceof ‪RequestToken) {
474  return '';
475  }
476  if (strtolower((string)($this->arguments['method'] ?? '')) === 'get') {
477  throw new \LogicException('Cannot apply request token for forms sent via HTTP GET', 1651775963);
478  }
479 
480  $context = GeneralUtility::makeInstance(Context::class);
481  $securityAspect = ‪SecurityAspect::provideIn($context);
482  // @todo currently defaults to 'nonce', there might be a better strategy in the future
483  $signingType = $signingType ?: 'nonce';
484  $signingProvider = $securityAspect->getSigningSecretResolver()->findByType($signingType);
485  if ($signingProvider === null) {
486  throw new \LogicException(sprintf('Cannot find request token signing type "%s"', $signingType), 1664260307);
487  }
488 
489  $signingSecret = $signingProvider->provideSigningSecret();
490  $requestToken = $requestToken->withMergedParams(['request' => ['uri' => $formAction]]);
491 
492  $attrs = [
493  'type' => 'hidden',
494  'name' => ‪RequestToken::PARAM_NAME,
495  'value' => $requestToken->toHashSignedJwt($signingSecret),
496  ];
497  return '<input ' . GeneralUtility::implodeAttributes($attrs, true) . '/>';
498  }
499 }
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\initializeArguments
‪initializeArguments()
Definition: FormViewHelper.php:108
‪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:269
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\addFormFieldNamesToViewHelperVariableContainer
‪addFormFieldNamesToViewHelperVariableContainer()
Definition: FormViewHelper.php:386
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\removeCheckboxFieldNamesFromViewHelperVariableContainer
‪removeCheckboxFieldNamesFromViewHelperVariableContainer()
Definition: FormViewHelper.php:438
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$hashService
‪HashService $hashService
Definition: FormViewHelper.php:77
‪TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder
Definition: UriBuilder.php:38
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\renderRequestTokenHiddenField
‪renderRequestTokenHiddenField()
Definition: FormViewHelper.php:456
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\setFormActionUri
‪setFormActionUri()
Definition: FormViewHelper.php:202
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\injectConfigurationManager
‪injectConfigurationManager(ConfigurationManagerInterface $configurationManager)
Definition: FormViewHelper.php:103
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\injectHashService
‪injectHashService(HashService $hashService)
Definition: FormViewHelper.php:88
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\injectMvcPropertyMappingConfigurationService
‪injectMvcPropertyMappingConfigurationService(MvcPropertyMappingConfigurationService $mvcPropertyMappingConfigurationService)
Definition: FormViewHelper.php:93
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
Definition: ConfigurationManagerInterface.php:28
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$extensionService
‪ExtensionService $extensionService
Definition: FormViewHelper.php:79
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\renderAdditionalIdentityFields
‪string renderAdditionalIdentityFields()
Definition: FormViewHelper.php:248
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:54
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\removeFormFieldNamesFromViewHelperVariableContainer
‪removeFormFieldNamesFromViewHelperVariableContainer()
Definition: FormViewHelper.php:394
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\injectExtensionService
‪injectExtensionService(ExtensionService $extensionService)
Definition: FormViewHelper.php:98
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$mvcPropertyMappingConfigurationService
‪MvcPropertyMappingConfigurationService $mvcPropertyMappingConfigurationService
Definition: FormViewHelper.php:78
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper
Definition: FormViewHelper.php:72
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\addFormObjectNameToViewHelperVariableContainer
‪addFormObjectNameToViewHelperVariableContainer()
Definition: FormViewHelper.php:297
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\getFormObjectName
‪string getFormObjectName()
Definition: FormViewHelper.php:323
‪TYPO3\CMS\Core\Security\RequestToken
Definition: RequestToken.php:26
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\addFieldNamePrefixToViewHelperVariableContainer
‪addFieldNamePrefixToViewHelperVariableContainer()
Definition: FormViewHelper.php:361
‪TYPO3\CMS\Core\Context\SecurityAspect
Definition: SecurityAspect.php:30
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\removeFormObjectNameFromViewHelperVariableContainer
‪removeFormObjectNameFromViewHelperVariableContainer()
Definition: FormViewHelper.php:308
‪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:349
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$configurationManager
‪ConfigurationManagerInterface $configurationManager
Definition: FormViewHelper.php:80
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\$tagName
‪string $tagName
Definition: FormViewHelper.php:75
‪TYPO3\CMS\Fluid\ViewHelpers
‪$output
‪$output
Definition: annotationChecker.php:114
‪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:86
‪TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewHelper
Definition: AbstractFormViewHelper.php:35
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\render
‪render()
Definition: FormViewHelper.php:142
‪TYPO3\CMS\Fluid\ViewHelpers\Form\CheckboxViewHelper
Definition: CheckboxViewHelper.php:64
‪TYPO3\CMS\Extbase\Service\ExtensionService
Definition: ExtensionService.php:34
‪TYPO3\CMS\Extbase\Security\HashScope
‪HashScope
Definition: HashScope.php:25
‪TYPO3\CMS\Extbase\Mvc\Controller\MvcPropertyMappingConfigurationService
Definition: MvcPropertyMappingConfigurationService.php:51
‪TYPO3\CMS\Core\Http\fromRequest
‪@ fromRequest
Definition: ApplicationType.php:66
‪TYPO3\CMS\Core\Security\RequestToken\create
‪static create(string $scope)
Definition: RequestToken.php:43
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\renderTrustedPropertiesField
‪renderTrustedPropertiesField()
Definition: FormViewHelper.php:449
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\addFormObjectToViewHelperVariableContainer
‪addFormObjectToViewHelperVariableContainer()
Definition: FormViewHelper.php:337
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContext
Definition: RenderingContext.php:35
‪TYPO3\CMS\Extbase\Security\prefix
‪@ prefix
Definition: HashScope.php:30
‪TYPO3\CMS\Core\Crypto\HashService
Definition: HashService.php:27
‪TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewHelper\prefixFieldName
‪prefixFieldName(string $fieldName)
Definition: AbstractFormViewHelper.php:46
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\removeFieldNamePrefixFromViewHelperVariableContainer
‪removeFieldNamePrefixFromViewHelperVariableContainer()
Definition: FormViewHelper.php:378
‪TYPO3\CMS\Core\Http\ApplicationType
‪ApplicationType
Definition: ApplicationType.php:55
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\getDefaultFieldNamePrefix
‪getDefaultFieldNamePrefix()
Definition: FormViewHelper.php:406
‪TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper\getFieldNamePrefix
‪getFieldNamePrefix()
Definition: FormViewHelper.php:367