Fluid Syntax: Expressions
The syntax for expressions in Fluid is a mix between plain
variable access (e. g. {variable}
) and ViewHelper usage in inline mode
(e.g. {my
).
Fluid's expression syntax is extendable, but in most circumstances the following features are available. See Expression Nodes to learn how to extend Fluid's expression behavior.
Objects and arrays
Within a ViewHelper call, arrays (with numeric keys) and object structures can be defined inline:
<f:variable name="myArray" value="{0: 'first item', 1: 'second item'}" />
<f:variable name="myObject" value="{abc: 'first item', def: 'second item'}" />
<f:variable name="myOtherObject" value="{'abc 123': 'first item', 'def 456': 'second item'}" />
These can also be nested and indented:
<f:variable name="myArrayOfObjects" value="{
0: {label: 'first item'},
1: {label: 'second item'},
}" />
Trailing commas are valid syntax and are recommended to create cleaner diffs in version control systems.
Type casting
The as
expression can be used to convert variables to a different type.
{my
will for example make sure you access
{my
as an array even if it is of another type null
, which is
useful when you pass a suspect value to a ViewHelper like f:
which requires
an array as input. Other supported cast types are: integer
, boolean
, string
,
float
and Date
.
If you use as array
on a string that contains comma-separated values, the
string is split at each comma, similar to PHP's
explode function.
Math expressions
Fluid supports basic math operations. For my
, the following expressions
result in:
{myNumber + 3} <!-- result: 9 -->
{myNumber - 3} <!-- result: 3 -->
{myNumber * 3} <!-- result: 18 -->
{myNumber / 3} <!-- result: 2 -->
{myNumber % 3} <!-- result: 0 -->
{myNumber ^ 3} <!-- result: 216 -->
Ternary Expressions
Fluid supports the ternary operator for variables. It is a shortcut to switch between two variables based on the value of a variable. For static values, like a string, this is not supported.
{checkVariable ? thenVariable : elseVariable}
If {check
evaluates to true
, variable {then
will be
used, otherwise {else
will be used.