GregPK
GregPK

Reputation: 1242

How to apply a filter whose name is stored in a variable

Basically, I am looking for the filter equivalent of the attribute() function for objects and arrays. I want to be able to apply a filter, whose name is stored in a variable.

{# 
    This works and is really useful 
    prints object.someVar 
#}
{% set varName = 'someVar' %}
{{ attribute(object,varName) }} 

{#
    The function "filter" does not exist
#}
{% set filterName = 'somefilter' %}
{{ filter(object,filterName) }} 

Upvotes: 3

Views: 419

Answers (1)

Vitalii Zurian
Vitalii Zurian

Reputation: 17976

To reach this goal you have to extend your TwigFilter.

How to initially write you Extension you can read here.

Assuming that you have created you extension, you have define your function, let's say applyFilter.

//YourTwigFilterExtension.php

public function getFunctions()
{
    return array(
        ...
        'apply_filter' => new \Twig_Function_Method($this, 'applyFilter'),
    );
}

Then, you have to define this function

public function applyFilter($context, $filterName)
{
    // handle parameters here, by calling the 
    // appropriate filter and pass $context there
}

After this manipulations you'll be able to call in Twig:

{{ apply_filter(object, 'filterName') }} 

Cheers ;)

Upvotes: 1

Related Questions