三種特殊語法:
{{ … }} “說些什么”:輸出一個變量值或者一個表達式的結果到模板。如:{{ 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 %}
多條件使用:
{% 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 %}