[!!!][FEATURE] Allow Fluid arrays only in ViewHelper arguments
authorWouter Wolters <typo3@wouterwolters.nl>
Sat, 9 Feb 2013 17:20:13 +0000 (18:20 +0100)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Mon, 25 Mar 2013 21:21:59 +0000 (22:21 +0100)
commit48ff7b5f1b52418174ec5d57b629de956a747d50
tree7f4e82957aa2b8e284342371e4a3ef0e2b290460
parentbee0ebe59af0a823f3753a29b2c8311e498ed63f
[!!!][FEATURE] Allow Fluid arrays only in ViewHelper arguments

This change greatly enhances the JavaScript compatibility of Fluid.

Fluid Arrays are a subset of the JavaScript object syntax, making it
hard to work with them in mixed HTML/JavaScript documents. For example
before this change, the following JavaScript Object was parsed by Fluid::

var uris = {
  endPoint1: '{f:uri.action(.)}',
  endPoint2: '{f:uri.action(.)}',
};

Before this change, the above snippet resulted in the following template,
as the generated array was casted to a string:

var uris = Array

With this change, Fluid only parses arrays which are used inside
ViewHelper arguments, such that an array inside normal text is not
converted anymore.

Breaking Change
===============

This change is only breaking in very rare cases where one relied on
the inner contents of the ViewHelper being an array, f.e. if one used
the debug ViewHelper as follows::

<f:debug>{key1: 'value1', key2: 'value2'}</f:debug>

. or if anybody wrote custom ViewHelpers which use this convention.

Relying on that would be very fragile anyways, as the insertion of a
single space character before the opening curly bracket or after the
closing one would cast the array back to a string.

ViewHelpers which were written like this should be re-written to take
the array as ViewHelper argument::

<f:debug value="{key1: 'value1', key2: 'value2'}" />

Change-Id: Id5d18ee43c9d00eb09cb74dab0a06897c843869f
Resolves: #43705
Releases: 6.1
Reviewed-on: https://review.typo3.org/18161
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn
Reviewed-by: Anja Leichsenring
Tested-by: Anja Leichsenring
typo3/sysext/fluid/Classes/Core/Parser/TemplateParser.php
typo3/sysext/fluid/Tests/Unit/Core/Parser/TemplateParserTest.php