细枝增加了过滤,映射和减少功能
嫩枝是Symfony和数千个其他项目中使用的模板语言。ob娱乐下载仅在过去6个月里,Twig就发布了30个版本。X和2。X分支,添加了许多有趣的新特性。本文主要介绍最近添加的一些新过滤器和标记。
过滤,映射和减少
“过滤、映射和缩减”模式在其他编程语言和范式(如函数式编程)中越来越流行,用于转换元素的集合和序列。你现在可以在Twig中使用它们了过滤器,地图而且减少过滤器与新的箭头函数相结合。
的过滤器
过滤器从序列中删除与给定表达式不匹配的所有元素。例如,忽略库存不足的产品:
1 2 3
{%为related_products|中的产品过滤器(product => product。股票> 10)%}{#……#}{%endfor%}
arrow函数接收序列或映射的值作为参数。这个参数的名称可以自由选择,它不必与用于迭代集合的变量相同:
1 2 3
{%为related_products|中的产品过滤器(p => p.id not in user. recentpurchasing) %}{#……#}{%endfor%}
如果你还需要sequence元素的键,为arrow函数定义两个参数(并将它们括在括号中):
1 2 3
{%集Components = all_components|过滤器((v, k) => v.published是true而不是(k以'Deprecated'开头))%}
多亏了新的过滤器
选项时,如果
属性不再需要条件为
循环,所以我们已经弃用它,而支持总是使用它过滤器
:
1 2 3 4
-{%为related_products中的产品,如果产品。股票> 10%}+{% product in related_products|filter(p => p.stock > 10) %}{#……#} {% endfor %}
如果你想继续使用为…如果
模式,包括如果
在为
循环:
1 2 3 4 5
{%为related_products %}中的产品{%如果产品。股票> 10%}{#……#}{%endif%}{%endfor%}
的地图
filter将一个箭头函数应用于序列或映射的元素(类似于PHP的)到()
):
1 2 3 4 5 6 7
{%集人=[{第一:“爱丽丝”,最后:“杜邦”},{:“Bob”,最后:“史密斯”},]%}{{人|地图(p => p.first ~ ' ' ~ p.last)|加入(', ')}}{#输出Alice Dupond, Bob Smith #}
的减少
Filter使用箭头函数迭代地减少到单个值的序列或映射。由于这种行为,箭头函数总是接收两个参数:当前值和减少前一个元素的结果(通常称为“进位”):
1 2
{%集Num_products = cart.rows|减少((previousTotal, row) => previousTotal + row. totalunits) %}{{num_products}}产品总数。
除了过滤器
,地图
而且减少
,最新版本的Twig添加了其他有用的过滤器和标签。
“列”过滤器
提供的
巴勃罗Schlapfer
在# 2992.
这个新列过滤器返回给定数组中单个列的值(在内部它使用PHParray_column()函数):
1
你的老朋友是{{马克斯(user.friends |列(“年龄”))}}岁了。
“apply”标签
的过滤器
标记已弃用(以免与新的混淆)过滤器
过滤器解释上面),它已被新的取代应用标签这与前面的标签完全相同:
1 2 3 4
-{%过滤器上%}+{% apply upper %}这个文本变成大写。{% endapply %}
允许使用可遍历对象
提供的
核能开发局řej报告》
在# 3016.
与筛选器和标记相关的另一个重要更改是,现在可以使用实现可遍历的PHP接口在任何可以使用迭代器或数组的地方与
标签,与
的参数包括
而且嵌入
标签,过滤器
过滤器等。
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
' ' '
{%为related_products中的产品,如果产品。股票> 10%}
' ' '
因为它就像英语。他会读和写。
替换需要更多的知识,因为现在我必须解释什么是过滤器和新的语法。他不是JavaScript程序员,他是HTML和CSS程序员。
' ' '
{related_products|过滤器(p => p.stock > 10) %}
' ' '
如果Twig的受众比程序员更广泛,请保留旧语法和新过滤器。
应该有一个很大的警告,你不应该这样做的模板和一个适当的例子,它应该做的正确。
然而,我最近尝试使用它,发现了一些看起来像bug的东西。我已经在https://stackoverflow.com/questions/56448878/cant-iterate-the-filter-filter-multiple-times上详细说明了这个问题,但不幸的是没有得到回复。
Fabien Potencier is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now它们可用于显示,而不是用于实现一些业务逻辑。但几乎所有其他特性都是如此(甚至“for”循环有时也不应该在模板中使用)。
@Josef使用这些新过滤器不会造成任何损害。至于例子,在文档中有很多。不知道我们能改变什么。什么好主意吗?
@Jean-Guilhem这是一个bug,现在已经修复了。