[BUGFIX] Preserve vendor name in refering request 88/24788/3
authorThomas Maroschik <tmaroschik@dfau.de>
Tue, 15 Oct 2013 09:28:41 +0000 (11:28 +0200)
committerWouter Wolters <typo3@wouterwolters.nl>
Wed, 16 Oct 2013 17:29:06 +0000 (19:29 +0200)
Fluid FormViewHelper adds some hidden fields that contain information
about the current controller. When the form is submitted and contains
a validation error the errorAction int the ActionController is hit.
This one builds a refering request object from the hidden fields without
a vendor name, as this one is not passed from the FormViewHelper.
The request object tries to guess the controller name but guesses a non
namespaced classes name as the vendor name is not given. To get further
information about the class methods the class name gets autoloaded and
creates a wrong classes cache entry as the autoloader cannot detect if
a extension has namespaced or non namespaced classes from the outside.

This patch introduces a hidden vendor name field in the Fluid FormViewHelper.

Fixes: #52823
Releases: 6.2, 6.1, 6.0
Change-Id: I0a82cf2ee07ce293eda0b9f50d3cac7b2a513f15
Reviewed-on: https://review.typo3.org/24788
Reviewed-by: Wouter Wolters
Tested-by: Wouter Wolters
typo3/sysext/fluid/Classes/ViewHelpers/FormViewHelper.php

index 2461322..ff3a69b 100644 (file)
@@ -251,11 +251,15 @@ class FormViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewH
        protected function renderHiddenReferrerFields() {
                $request = $this->controllerContext->getRequest();
                $extensionName = $request->getControllerExtensionName();
+               $vendorName = $request->getControllerVendorName();
                $controllerName = $request->getControllerName();
                $actionName = $request->getControllerActionName();
                $result = chr(10);
                if ($this->configurationManager->isFeatureEnabled('rewrittenPropertyMapper')) {
                        $result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[@extension]') . '" value="' . $extensionName . '" />' . chr(10);
+                       if ($vendorName !== NULL) {
+                               $result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[@vendor]') . '" value="' . $vendorName . '" />' . chr(10);
+                       }
                        $result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[@controller]') . '" value="' . $controllerName . '" />' . chr(10);
                        $result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[@action]') . '" value="' . $actionName . '" />' . chr(10);
                        $result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[arguments]') . '" value="' . htmlspecialchars($this->hashService->appendHmac(base64_encode(serialize($request->getArguments())))) . '" />' . chr(10);
@@ -458,4 +462,4 @@ class FormViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewH
        }
 }
 
-?>
\ No newline at end of file
+?>