我已经定义了如下的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
,因为:
withFragment
,withClass
等返回$this
),因此您可以对它执行多项操作,例如添加一个类和一个片段。Twig_Markup
是什么。由于它不是接口,因此无法将其添加到Link
类中。