[BUGFIX] ClassAliasMap, Tx_ VH namespace and closing tag throws Exception 14/25814/9
authorClaus Due <claus@namelesscoder.net>
Sat, 30 Nov 2013 21:16:32 +0000 (22:16 +0100)
committerHelmut Hummel <helmut.hummel@typo3.org>
Wed, 4 Dec 2013 18:54:27 +0000 (19:54 +0100)
When using aliased ViewHelper class names and old Tx_ namespace in
template and ViewHelper uses closing tag (not self-closing) an
error is thrown, saying closing tag ViewHelper is not the same
as openening tag ViewHelper (closing tag uses old class name,
opening tag uses new). To solve, TemplateParser now checks if
resolved ViewHelper class names are aliases of other classes and
if so, uses the real class name instead of the alias.

Steps to reproduce error:

* template namespace: {namespace myext=Tx_Myext_ViewHelpers}
* template code: <myext:vh>test</myext:vh>
* namespaced VH class: \Myext\ViewHelpers\VhViewHelper
* ClassAliasMap: Tx_Myext_ViewHelpers_VhViewHelper ->
  \Mext\ViewHelpers\VhViewHelper
* framework: render template using any View

Error 1224485398 "closing tag does not match opening tag" thrown.

Steps taken to fix error:

* run constructed class name through alias resolve method.

Fixes: #54115
Releases: 6.2, 6.1, 6.0
Change-Id: I070b6199095ec84c7213cfc0c3775f5f08340840
Reviewed-on: https://review.typo3.org/25814
Reviewed-by: Helmut Hummel
Tested-by: Helmut Hummel
typo3/sysext/fluid/Classes/Core/Parser/TemplateParser.php

index 25acbfb..d8d8320 100644 (file)
@@ -570,6 +570,7 @@ class TemplateParser {
                }
                $className .= 'ViewHelper';
                $name = $this->namespaces[$namespaceIdentifier] . $namespaceSeparator . $className;
+               $name = \TYPO3\CMS\Core\Core\ClassLoader::getClassNameForAlias($name);
                return $name;
        }