【问题标题】:Twig extension filter or function name in twig variable does not work?树枝变量中的树枝扩展过滤器或函数名称不起作用?
【发布时间】:2013-12-12 12:41:29
【问题描述】:
{{ row[col.key] | col.filter }}

我在 col.filter 变量中有过滤器。我尝试创建如下链接中提到的 eval 过滤器,https://github.com/fabpot/Twig-extensions/pull/53/files 并尝试https://github.com/marcj/twig-apply_filter-bundle 或调用类似

{{ row[col.key] | eval(col.filter) }}

{{ eval(row[col.key] , col.filter) }}

但它不起作用。

问题的演示在这里,

https://github.com/vishalmelmatti/twig_dynamic_filter

【问题讨论】:

    标签: php symfony twig


    【解决方案1】:

    好的,这有点麻烦,但是使用template_from_string + include 方法怎么样?有点丑,而且可能很贵,但至少它应该可以工作。

     

    概念证明:

    {% set col, row = { key: 'x', filter: 'raw' }, { x: '<b>one</b>', y: '<b>two</b>' } %}
    {{ include(template_from_string('{{ row[col.key]|' ~ col.filter ~ ' }}')) }}
    

    ...将输出:一个

     

    虽然这...

    {% set col, row = { key: 'x', filter: 'escape' }, { x: '<b>one</b>', y: '<b>two</b>' } %}
    ...
    

    ...将输出:一个

    【讨论】:

    • 非常感谢,我差点放弃了,你救了!
    【解决方案2】:

    此时您不能这样做,但我建议您创建自己的 twig 方法或过滤器,将您要应用的过滤器作为参数。

    我建议您使用此捆绑包或从中获取灵感:https://github.com/marcj/twig-apply_filter-bundle

    【讨论】:

    • github.com/marcj/twig-apply_filter-bundle 是在昨天与我讨论后创建的(查看创作时间),尝试过但无法正常工作,因此试图找到其他解决方案,
    • 您能否更详细地描述一下“但它不起作用”。意思是?没有输出,错误,没有过滤?我发布的 repo 已经过单元测试,因此应该可以工作。
    【解决方案3】:

    如 IRC 所述,您可以采用另一种方法,并使用 Format 接口将格式应用于您的元素:

    这里有一个简单的 POC https://gist.github.com/Lumbendil/d94109e91ceab7fae7e7

    【讨论】:

      【解决方案4】:

      解决办法如下:

      https://github.com/marcj/twig-apply_filter-bundle

      它是一个 Symfony 捆绑包,可提供您所需的一切。你也可以在没有 symfony 的情况下使用它。

      【讨论】:

      • 谢谢,这个链接已经被提及了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多