3

基本上,我正在寻找与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) }} 
4

1 回答 1

1

为了达到这个目标,你必须扩展你的 TwigFilter。

如何最初为您编写扩展程序,您可以在此处阅读。

假设你已经创建了你的扩展,你已经定义了你的函数,比如说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') }} 

干杯;)

于 2012-08-01T15:03:23.963 回答