【问题标题】:create a twig filter that wraps output in HTML创建一个用 HTML 包装输出的树枝过滤器
【发布时间】:2012-09-25 10:48:42
【问题描述】:

我在 Twig 中创建了一个过滤器,它将一些 HTML 包装在输出周围。例如

{{ 'this is a "test"'|display }}

输出

<div id="container">
  <div id="content">
    this is a "test"
  </div>
  <div id="toolbar">
    <a href="/edit.php">edit</a>
  </div>
</div>

困境是,我希望后续过滤器仅应用于原始内容,而不是整个 html。例如

{{ 'this is a "test"'|display|upper|e }}

输出

&LT;DIV ID=&QUOT;CONTAINER&QUOT;&GT;
  &LT;DIV ID=&QUOT;CONTENT&QUOT;&GT;
    THIS IS A &QUOT;TEST&QUOT;
  &LT;/DIV&GT;
  &LT;DIV ID=&QUOT;TOOLBAR&QUOT;&GT;
    &LT;A HREF=&QUOT;/EDIT.PHP&QUOT;&GT;EDIT&LT;/A&GT;
  &LT;/DIV&GT;
&LT;/DIV&GT;

但你可以想象,我更喜欢这样的输出

<div id="container">
  <div id="content">
    THIS IS A &QUOT;TEST&QUOT;
  </div>
  <div id="toolbar">
    <a href="/edit.php">edit</a>
  </div>
</div>

将过滤顺序更改为

{{ 'this is a "test"'|upper|e|display }}

适用于上层过滤器,但不适用于转义过滤器,因为它始终将自己置于过滤器队列的末尾。它也应该与 autoescape=true 一起使用。

阅读 twig 文档,我找不到一个标准的方法来做我想做的事。有人可能尝试过类似的东西吗?或者有人想解决这个问题?

提前致谢!

【问题讨论】:

    标签: php filter twig template-engine


    【解决方案1】:

    试试:

    {{ 'this is a "test"'|upper|e|display }}
    

    首先过滤您的内容,然后包装它。

    【讨论】:

    • 谢谢。问题是 e 过滤器是一个例外,它总是将自己置于过滤器队列的末尾。我也想要使用 autoescape=true 的函数。
    • 我的天啊,SF2 还是让我惊叹...然后尝试制作你自己的转义过滤器,但你必须明确使用它我不认为 SF2 会让你改变它的自动转义方法我读了。
    • 这是一个想法。我会调查的。尽管我可以想象这几乎是微不足道的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    相关资源
    最近更新 更多