From 5b0f67c4948f0ecdd1ac930b1b880a2a1142ef71 Mon Sep 17 00:00:00 2001 From: Ralf Zimmermann <ralf.zimmermann@tritum.de> Date: Thu, 1 Dec 2016 03:59:11 +0100 Subject: [PATCH] [FEATURE] - Let FLUIDTEMPLATE mimic an actual extbase web request Adds the possibility to let the FLUIDTEMPLATE content element mimic an actual extbase web request. This makes it possible to access submitted data like in extbase with ...->controllerContext->getRequest()->getArguments() Resolves: #78842 Releases: master Change-Id: I27e34e11ae9d5526ee694825cb74b6fcc6e42061 Reviewed-on: https://review.typo3.org/50814 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Gleb Levitin <gleb.levitin@dkd.de> Tested-by: Gleb Levitin <gleb.levitin@dkd.de> Reviewed-by: Jan Helke <typo3@helke.de> Tested-by: Jan Helke <typo3@helke.de> --- ...templateMimicAnActualExtbaseWebRequest.rst | 40 +++++++++++++++++++ .../FluidTemplateContentObject.php | 29 ++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 typo3/sysext/core/Documentation/Changelog/master/Feature-78842-LetFluidtemplateMimicAnActualExtbaseWebRequest.rst diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-78842-LetFluidtemplateMimicAnActualExtbaseWebRequest.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-78842-LetFluidtemplateMimicAnActualExtbaseWebRequest.rst new file mode 100644 index 000000000000..d58fb6d0fe86 --- /dev/null +++ b/typo3/sysext/core/Documentation/Changelog/master/Feature-78842-LetFluidtemplateMimicAnActualExtbaseWebRequest.rst @@ -0,0 +1,40 @@ +.. include:: ../../Includes.txt + +======================================================================= +Feature: #78842 - Let FLUIDTEMPLATE mimic an actual extbase web request +======================================================================= + +See :issue:`78842` + +Description +=========== + +Adds the possibility to let the FLUIDTEMPLATE content element mimic an +actual extbase web request. +This makes it possible to access submitted data like in extbase with +...->controllerContext->getRequest()->getArguments() + + +Impact +====== + +Data which was submitted through a FLUIDTEMPLATE content element are now +available within +... $view->getRenderingContext() + ->getControllerContext() + ->getRequest() + ->getArguments() + + +Affected Installations +====================== + +Any installation which use the FLUIDTEMPLATE content element which are +initialized with the following settings: + +extbase.pluginName +extbase.controllerExtensionName +extbase.controllerName +extbase.controllerActionName + +.. index:: Frontend diff --git a/typo3/sysext/frontend/Classes/ContentObject/FluidTemplateContentObject.php b/typo3/sysext/frontend/Classes/ContentObject/FluidTemplateContentObject.php index fa1f2cc18047..1562137e450c 100644 --- a/typo3/sysext/frontend/Classes/ContentObject/FluidTemplateContentObject.php +++ b/typo3/sysext/frontend/Classes/ContentObject/FluidTemplateContentObject.php @@ -16,6 +16,9 @@ namespace TYPO3\CMS\Frontend\ContentObject; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\StringUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManager; +use TYPO3\CMS\Extbase\Mvc\Web\RequestBuilder; +use TYPO3\CMS\Extbase\Object\ObjectManager; use TYPO3\CMS\Extbase\Service\TypoScriptService; use TYPO3\CMS\Fluid\View\StandaloneView; @@ -240,6 +243,32 @@ class FluidTemplateContentObject extends AbstractContentObject if ($requestControllerActionName) { $this->view->getRequest()->setControllerActionName($requestControllerActionName); } + + if ( + $requestPluginName + && $requestControllerExtensionName + && $requestControllerName + && $requestControllerActionName + ) { + $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManager::class); + $configurationManager->setConfiguration([ + 'extensionName' => $requestControllerExtensionName, + 'pluginName' => $requestPluginName, + ]); + + if (!isset($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$requestControllerExtensionName]['plugins'][$requestPluginName]['controllers'])) { + $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$requestControllerExtensionName]['plugins'][$requestPluginName]['controllers'] = [ + $requestControllerName => [ + 'actions' => [ + $requestControllerActionName, + ], + ], + ]; + } + + $requestBuilder = GeneralUtility::makeInstance(ObjectManager::class)->get(RequestBuilder::class); + $this->view->getRenderingContext()->getControllerContext()->setRequest($requestBuilder->build()); + } } /** -- GitLab