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. {myArray -> f:count()}).

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'}" />
Copied!

These can also be nested and indented:

<f:variable name="myArrayOfObjects" value="{
    0: {label: 'first item'},
    1: {label: 'second item'},
}" />
Copied!

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. {myPossiblyArray as array} will for example make sure you access {myPossiblyArray} 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:for which requires an array as input. Other supported cast types are: integer, boolean, string, float and DateTime.

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 myNumber = 6, 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 -->
Copied!

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}
Copied!

If {checkVariable} evaluates to true, variable {thenVariable} will be used, otherwise {elseVariable} will be used.