更好的白色空间控制在树枝模板
空格控制在树枝的模板允许您控制缩进和间距(通常是HTML代码)生成的内容。控制空白是非常重要的在使用树枝像YAML生成内容,文本电子邮件或任何其他格式的空白是重要的。
相比之下,当生成HTML内容,大多数时候你应该忽略这个功能,因为HTML内容简化和压缩之前将它们发送给用户,所以试图生成完全一致的HTML代码只是浪费时间。
然而,有一些特定的情况下,显示空白可以改变事情。例如,当一个<一>
元素包含空格后的链接文本和链接显示下划线,空格是可见的。这就是为什么树枝提供多种方式控制空白。在最近的树枝版本,我们已经改善了这些功能。
新的空白削减选项
考虑下面的树枝片段:
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>
嫩枝只删除默认第一\ n
每个树枝标记(后字符\ n
后如果
和endif
标签在前面的例子)。如果你想生成HTML代码与更好的凹痕,您可以使用- - - - - -
字符,删除所有空格(包括换行)左边或右边的标签:
1 2 3 4 5 6 7
<ul><李>{% -如果some_expression %}{{- some_variable}}{%endif- - - - - - %}< /李>< /ul>
输出:
1 2 3
<ul><李>Lorem Ipsum< /李>< /ul>
从树枝1.39和2.8.0,你有另一个选择控制空白:~
字符(可应用于{{
,{%
和{#
)。这是类似于- - - - - -
,唯一的区别~
不删除换行:
1 2 3 4 5 6 7
<ul><李>{% ~如果some_expression %}{{some_variable -}}{%endif~ %}< /李>< /ul>
输出现在包含前/后换行<李>
标签,所以生成的HTML是更类似于原始的分支代码你写道:
1 2 3 4 5
<ul><李>Lorem Ipsum< /李>< /ul>
添加了一个无限的过滤器
在以前的树枝版本中,有一个标签{%无限的%}
将给定字符串内容删除HTML标记之间的空白。然而,在树枝,把一些内容显示它们是由过滤器。
这就是为什么,从树枝1.38和2.7.3,没有余地的
标签已被弃用的没有余地的
过滤器,这是完全相同的:
1
{{some_variable_with_HTML_content |没有余地的}}
然而,这是常用的替代方法应用一些过滤一些HTML内容:
1 2 3 4 5
——{%无限的%}+{%应用无限的%}{#一些HTML内容#}——{% endspaceless %}+ {% endapply %}
如果你错过了它,应用
标签最近添加的代替之前的过滤器
标签。
在任何情况下,即使这些变化,还是建议不使用没有余地的
过滤器的太多了。空白的去除这个过滤器在运行时发生,所以称之为反复会损害性能。
细粒度的逃离在三元表达式
这个新特性介绍了树枝1.39和2.8不是空格控制有关,但这是一个重要的新功能来考虑在你的模板。考虑下面的例子和结果呈现在树枝版本1.39和2.8:
1 2 3 4 5 6 7 8 9 10 11
{%集foo = foo <强> < /强>的%}{%集酒吧= ' <强>栏< /强> ' %}{{假吗?“酒吧<强> < / >强”:foo |生}}{#显示为“foo <强> < / >强”#}{{假吗?酒吧:foo |生}}{#显示为“& lt; strong> foo< / strong>“#}{{(假的?酒吧:foo) |生}}{#显示为“foo <强> < / >强”#}
这个例子的原因在以前的树枝版本这样的工作是在第一个三元语句,喷火
被标记为安全,树枝不逃避静态值。在第二个三元声明,即使喷火
被标记为安全的,酒吧
仍然是不安全的,所以整个表达式。第三个三元声明是标记为安全,结果不是逃脱了。
这种行为是困惑许多设计人员和开发人员。这就是为什么,从树枝1.39和2.8,这个例子已经改变的结果如下:
1 2 3 4 5 6 7
{%集foo = foo <强> < /强>的%}{%集酒吧= ' <强>栏< /强> ' %}{{假吗?“酒吧<强> < / >强”:foo |生}}{{假吗?酒吧:foo |生}}{{(假的?酒吧:foo) |生}}{#显示为“foo <强> < / >强”在所有情况下#}
之前,逃避策略在三元操作符的双方都是一样的。在树枝1.39和2.8,嫩枝为三元操作符适用于一个特殊的代码路径,能够逃避双方策略不同。
naitsirch is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now