树枝模板中更好的空白控制
空格控制在Twig模板允许你控制缩进和间距生成的内容(通常是HTML代码)。当使用Twig生成像YAML,文本电子邮件或任何其他格式的内容时,控制空白是非常重要的。
相反,在生成HTML内容时,大多数情况下您应该忽略这个特性,因为HTML内容在发送给用户之前会被缩小和压缩,因此试图生成完美对齐的HTML代码只是浪费时间。
但是,在某些特定的情况下,空格可以改变内容的显示方式。例如,当一个<一>
元素在链接文本后包含空白,并且链接显示下划线,空白是可见的。这就是为什么Twig提供了多种控制空白的方法。在最近的Twig版本中,我们改进了这些功能。
新的空格修剪选项
考虑下面的Twig片段:
1 2 3 4 5 6 7
<ul><李>{%如果some_expression %}{{some_variable}}{%endif%}李>ul>
如果的值some_variable
是“回车键”
时生成的HTML如果
表达式匹配,将如下所示:
1 2 3 4 5
<ul><李>Lorem Ipsum李>ul>
默认情况下,Twig只删除第一个\ n
每个Twig标记后的字符\ n
后如果
而且endif
标签)。如果希望生成缩进更好的HTML代码,可以使用-
字符,删除标记左侧或右侧的所有空格(包括换行符):
1 2 3 4 5 6 7
<ul><李>{% -如果some_expression %}{{- some_variable -}}{%endif- - - - - - %}李>ul>
现在的输出是:
1 2 3
<ul><李>Lorem Ipsum李>ul>
从Twig 1.39和2.8.0开始,你有另一个选择来控制空白~
字符(可应用于{{
,{%
而且{#
).它类似于-
,唯一不同的是~
不移除换行符:
1 2 3 4 5 6 7
<ul><李>{% ~如果some_expression %}{{some_variable -}}{%endif~ %}李>ul>
元素之后/之前的换行<李>
标签,所以生成的HTML更类似于你写的原始Twig代码:
1 2 3 4 5
<ul><李>Lorem Ipsum李>ul>
增加了一个无空格过滤器
在之前的Twig版本中,有一个名为{%无空格%}
它转换了给定的字符串内容,以删除HTML标记之间的空白。然而,在Twig中,在显示内容之前转换一些内容是由过滤器完成的。
这就是为什么从Twig 1.38和2.7.3开始没有余地的
标记已被弃用,而支持没有余地的
过滤器,它的工作原理完全相同:
1
{{some_variable_with_HTML_content |没有余地的}}
然而,这通常用于对某些HTML内容应用一些过滤器的替代方式:
1 2 3 4 5
-{%无空格%}+{%应用无空格%}{#一些HTML内容在这里#}-{% endspaceless %}+{% endapply %}
以防你错过了应用
标签最近添加的替换之前的过滤器
标签。
在任何情况下,即使进行了这些更改,仍然建议不要使用没有余地的
过滤太多。使用此过滤器删除空白是在运行时进行的,因此反复调用它可能会损害性能。
对三元表达式进行细粒度转义
这个在Twig 1.39和2.8中引入的新特性与空白控件无关,但它是模板中需要考虑的重要新特性。考虑下面的例子以及在1.39和2.8之前的Twig版本中呈现的结果:
1 2 3 4 5 6 7 8 9 10 11
{%集Foo = ' Foo ' %}{%集Bar = ' Bar ' %}{{false ?'bar': foo|生}}{#渲染为'foo' #}{{false ?Bar: foo|生}}{#呈现为'<strong>foo</strong>' #}{{(false ?Bar: foo)|生}}{#渲染为'foo' #}
这个例子在之前的Twig版本中以这种方式工作的原因是,在第一个三元语句中,喷火
标记为安全,Twig不会转义静态值。在第二个三元语句中,even if喷火
被标记为安全酒吧
仍然不安全,整个表达也是如此。第三个三元语句被标记为安全,结果不会转义。
这种行为让许多设计人员和开发人员感到困惑。这就是为什么从Twig 1.39和2.8开始,这个例子的结果发生了如下变化:
1 2 3 4 5 6 7
{%集Foo = ' Foo ' %}{%集Bar = ' Bar ' %}{{false ?'bar': foo|生}}{{false ?Bar: foo|生}}{{(false ?Bar: foo)|生}}{#在所有情况下呈现为“foo”#}
在此之前,对于三元运算符的两边,转义策略是相同的。现在,在Twig 1.39和2.8中,Twig为三元运算符应用了一个特殊的代码路径,可以为两边提供不同的转义策略。
naitsirch is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now