Twig安全功能的制作方法也Twig安全

时间:2018-12-26 13:58:50

标签: php twig

我已经定义了如下的Twig函数:

new Twig_SimpleFunction('link', 'html_link', ['is_safe' => ['html']]);

因此Twig不会自动转义每个{{ link(...) }}。可行。

但是html_link()返回一个Link对象,该对象可以在模板中进行调整,以添加URL #fragment或链接[attribute]

{{ link('url', 'label').withFragment('foo') }}
{{ link('url', 'label').withClass('special') }}

但是Twig检测到它不再是纯link()了,所以它不再是html安全的了,我必须添加|raw使其起作用:

{{ link('url', 'label').withFragment('foo')|raw }}
{{ link('url', 'label').withClass('special')|raw }}

哪个工作。但。不太漂亮。

我可以告诉Twig link().withFragment()link().withClass()仍然是HTML安全的吗?

自定义过滤器有一个选项preserves_safety,有点像这样:

{{ someFunction(someVar)|someFilter }}

如果someFunfction是html安全的,并且someFilter是用preserves_safety定义的,则输出仍然是安全的。我不想永远为Link方法创建过滤器,所以这还不够好。


我不能使用Twig_Markup,因为:

  • 它必须尽可能长地保留一个对象(withFragmentwithClass等返回$this),因此您可以对它执行多项操作,例如添加一个类和一个片段。
  • 它必须在Twig之外可用。电子邮件和即时消息可以包含链接。只有Twig知道(并且应该知道)Twig_Markup是什么。由于它不是接口,因此无法将其添加到Link类中。

0 个答案:

没有答案