Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] Array unpacking (spread operator) #810

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Commits on Jul 5, 2023

  1. [FEATURE] Array unpacking (spread operator)

    This change adds unpacking to Fluid’s array syntax, also known as the
    spread operator. Internally, it uses PHP’s own spread operator, so the
    behavior should be consistent between Fluid and PHP.
    
    Example:
    
    <f:variable name="array1" value="{key1: 'value1'}" />
    <f:variable name="array2" value="{key2: 'value2'}" />
    <f:variable name="combinedArray" value="{...array1, ...array2, anotherKey: 'another value'}" />
    
    Result:
    
    {key1: 'value1', key2: 'value2', anotherKey: 'another value'}
    
    Note that this change does not cover dynamic ViewHelper arguments.
    This means that you can only use the spread operator in normal array
    contexts, but not for arguments in inline ViewHelper syntax. This is
    currently not possible because then ViewHelper arguments could
    only be validated at runtime rather than parsetime, which is where
    validation currently happens for performance reasons.
    
    Because of similarities between object accessor and array definition
    syntax, there is an edge case where Fluid wrongly chooses object
    accessor instead of array syntax. This only happens if the array
    syntax is used without any spaces at the beginning and only with a
    single spread operator. This case shouldn’t be relevant for real-world
    usage because it only creates a copy of the original array.
    
    This edge case results in null:
    
    {...input1}
    
    These variants work fine:
    
    { ...input1}
    { ...input1 }
    {...input1, ...input2}
    {key: value, ...input1}
    s2b committed Jul 5, 2023
    Configuration menu
    Copy the full SHA
    57766a1 View commit details
    Browse the repository at this point in the history