twig  之基本语法

来源:互联网 发布:阿里巴巴一件代发淘宝 编辑:程序博客网 时间:2024/06/03 16:34

Twig定义了三种特殊的语法:

(前两种和angular JS类似)

  • {{ … }}“说些什么”:输出一个变量值或者一个表达式的结果到模板。如:{{ item.username }}。 twig也包含filters,它可以在模板渲染之前改变输出内容。{{表达式 | filters}}。这里还需要注意的是,当表达式中传值的时候,使用『:』,例如:{{ path(‘board_reply’,{id:item.id}) }}
  • {% … %}“做些什么”:控制模板逻辑的tag(标签),用于执行声明,如if、for循环语句等。
  • {# … #}“进行注释”:它相当于php的语法。它用于注释单行和多行。注释的内容不作为页面输出。

block

相当于占位符,当被另一个模板继承时,可以调用这个模块。定义时的内容在继承的模板中默认是不会出现的,可以使用 {{ parent() }} 来显示。块名称可以使用字母数字字符和下划线,不允许使用破折号(-)。
{% block ** %} 用来定义,{% endblock %}

extends

不支持多重继承,只支持一个扩展模板

{% extends 'base.html.twig' %}

{% include %}:包含模板
{% extends %}:扩展模板
{% embed %} xxx {% endembed %}:包含模板并扩展该模板的内容,相当于 include 和 extends 的结合体
{% macro %} xxx {% endmacro %}:定义宏以便多次调用,与定义 PHP 函数无异
{% from aaa import bbb as ccc %}:从指定模板导入宏并设置别名

注意事项

  • 如果在模板中使用{% extends %},它必须是模板中的第一个标签
  • 如果你发现在多个模板中有重复的内容,这可能意味着你需要为该内容在父模板中定义一个{% block %}了。
  • 某些情况下,更好的解决方案可能是把这些内容放到一个新模板中,然后在该模板中include它。例如(在哪使用在哪 include): {{ include(‘article/article_details.html.twig’, { ‘article’: article }) }}
  • 如果你需要从父模板中获取一个block的内容,可以使用{{ parent() }}函数。如果你只是想在父级块上添加新内容,而不是完全覆盖它,这很有用

记住 end。

比如{% if **%} 和{% endif %} 、
{% for %} 和 {% endfor %}

判断

一个变量是否定义(存在)

{% if item is defined %}{% item.name %} {% endif %}

一个变量是否为空

{% if item is null %}    {# do something #}{% endif %}

法二

 {% if item %}     {{ item.id }}  {% else %}        <h1>还没有人留言或留言已经删除</h1>    {% endif %}

多个条件 and 、or用法

{% if item is defined and item %}    {{ item.id }}  {% else %}    <h1>还没有人留言或留言已经删除</h1>{% endif %}

循环

法一:

   {% for item in list %}                <li> {{ item.title }} </li>   {% endfor %}

法二:按数组的key,value遍历,key=index,value=item

{% for index, item in list %}    {{ index }}:{{ item.id }}{% endfor %}

按数组的 key 遍历

{% for key in list|keys %}{{ key }}{% endfor %}
原创粉丝点击