如何应用名称存储在变量中的过滤器

时间:2012-05-22 14:18:28

标签: symfony twig

基本上,我正在寻找对象和数组的attribute()函数的过滤器等价物。我希望能够应用一个过滤器,其名称存储在一个变量中。

{# 
    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) }} 

1 个答案:

答案 0 :(得分:1)

要实现此目标,您必须扩展TwigFilter。

如何最初为您编写扩展程序,您可以阅读here

假设您已经创建了扩展程序,那么您已经定义了函数,假设applyFilter

//YourTwigFilterExtension.php

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

然后,你必须定义这个功能

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

在这种操作之后,您将能够在Twig中调用:

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

干杯;)