[TASK] Move arguments to initializeArguments() in ActionVH in ext:fluid 78/48878/7
authorRoberto Torresani <erreti@gmail.com>
Sun, 10 Jul 2016 16:43:59 +0000 (18:43 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Tue, 12 Jul 2016 18:53:11 +0000 (20:53 +0200)
Move the argument registrations away from the render() method
to initializeArguments(), to prevent any errors with PHP7 and
subclassed ViewHelpers if/when render() method signatures change

Resolves: #77013
Releases: master
Change-Id: Ia2d871b6f1a213bf17e188a32f9c1c2ac0c6bd2e
Reviewed-on: https://review.typo3.org/48878
Reviewed-by: Jan Helke <typo3@helke.de>
Tested-by: Jan Helke <typo3@helke.de>
Tested-by: Bamboo TYPO3com <info@typo3.com>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/fluid/Classes/ViewHelpers/Uri/ActionViewHelper.php

index bed74f9..4cd7646 100644 (file)
@@ -30,27 +30,57 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Uri;
 class ActionViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper
 {
     /**
-     * @param string $action Target action
-     * @param array $arguments Arguments
-     * @param string $controller Target controller. If NULL current controllerName is used
-     * @param string $extensionName Target Extension Name (without "tx_" prefix and no underscores). If NULL the current extension name is used
-     * @param string $pluginName Target plugin. If empty, the current plugin name is used
-     * @param int $pageUid target page. See TypoLink destination
-     * @param int $pageType type of the target page. See typolink.parameter
-     * @param bool $noCache set this to disable caching for the target page. You should not need this.
-     * @param bool $noCacheHash set this to suppress the cHash query parameter created by TypoLink. You should not need this.
-     * @param string $section the anchor to be added to the URI
-     * @param string $format The requested format, e.g. ".html
-     * @param bool $linkAccessRestrictedPages If set, links pointing to access restricted pages will still link to the page even though the page cannot be accessed.
-     * @param array $additionalParams additional query parameters that won't be prefixed like $arguments (overrule $arguments)
-     * @param bool $absolute If set, an absolute URI is rendered
-     * @param bool $addQueryString If set, the current query parameters will be kept in the URI
-     * @param array $argumentsToBeExcludedFromQueryString arguments to be removed from the URI. Only active if $addQueryString = TRUE
-     * @param string $addQueryStringMethod Set which parameters will be kept. Only active if $addQueryString = TRUE
+     * Initialize arguments
+     *
+     * @return void
+     * @api
+     */
+    public function initializeArguments()
+    {
+        parent::initializeArguments();
+        $this->registerArgument('action', 'string', 'Target action');
+        $this->registerArgument('arguments', 'array', 'Arguments', false, array());
+        $this->registerArgument('controller', 'string', 'Target controller. If NULL current controllerName is used');
+        $this->registerArgument('extensionName', 'string', 'Target Extension Name (without "tx_" prefix and no underscores). If NULL the current extension name is used');
+        $this->registerArgument('pluginName', 'string', 'Target plugin. If empty, the current plugin name is used');
+        $this->registerArgument('pageUid', 'int', 'Target page. See TypoLink destination');
+        $this->registerArgument('pageType', 'int', 'Type of the target page. See typolink.parameter', false, 0);
+        $this->registerArgument('noCache', 'bool', 'Set this to disable caching for the target page. You should not need this.', false, false);
+        $this->registerArgument('noCacheHash', 'bool', 'Set this to suppress the cHash query parameter created by TypoLink. You should not need this.', false, false);
+        $this->registerArgument('section', 'string', 'The anchor to be added to the URI', false, '');
+        $this->registerArgument('format', 'string', 'The requested format, e.g. ".html', false, '');
+        $this->registerArgument('linkAccessRestrictedPages', 'bool', 'If set, links pointing to access restricted pages will still link to the page even though the page cannot be accessed.', false, false);
+        $this->registerArgument('additionalParams', 'array', 'additional query parameters that won\'t be prefixed like $arguments (overrule $arguments)', false, array());
+        $this->registerArgument('absolute', 'bool', 'If set, an absolute URI is rendered', false, false);
+        $this->registerArgument('addQueryString', 'bool', 'If set, the current query parameters will be kept in the URI', false, false);
+        $this->registerArgument('argumentsToBeExcludedFromQueryString', 'array', 'arguments to be removed from the URI. Only active if $addQueryString = TRUE', false, array());
+        $this->registerArgument('addQueryStringMethod', 'string', 'Set which parameters will be kept. Only active if $addQueryString = TRUE');
+    }
+
+    /**
+     *
      * @return string Rendered link
      */
-    public function render($action = null, array $arguments = array(), $controller = null, $extensionName = null, $pluginName = null, $pageUid = null, $pageType = 0, $noCache = false, $noCacheHash = false, $section = '', $format = '', $linkAccessRestrictedPages = false, array $additionalParams = array(), $absolute = false, $addQueryString = false, array $argumentsToBeExcludedFromQueryString = array(), $addQueryStringMethod = null)
+    public function render()
     {
+        $pageUid = $this->arguments['pageUid'];
+        $pageType = $this->arguments['pageType'];
+        $noCache = $this->arguments['noCache'];
+        $noCacheHash = $this->arguments['noCacheHash'];
+        $section = $this->arguments['section'];
+        $format = $this->arguments['format'];
+        $linkAccessRestrictedPages = $this->arguments['linkAccessRestrictedPages'];
+        $additionalParams = $this->arguments['additionalParams'];
+        $absolute = $this->arguments['absolute'];
+        $addQueryString = $this->arguments['addQueryString'];
+        $argumentsToBeExcludedFromQueryString = $this->arguments['argumentsToBeExcludedFromQueryString'];
+        $addQueryStringMethod = $this->arguments['addQueryStringMethod'];
+        $action = $this->arguments['action'];
+        $arguments = $this->arguments['arguments'];
+        $controller = $this->arguments['controller'];
+        $extensionName = $this->arguments['extensionName'];
+        $pluginName = $this->arguments['pluginName'];
+
         $uriBuilder = $this->controllerContext->getUriBuilder();
         $uri = $uriBuilder
             ->reset()