首頁 >後端開發 >php教程 >Twig 的 tags学习(中文) 之一_PHP教程

Twig 的 tags学习(中文) 之一_PHP教程

WBOY
WBOY原創
2016-07-13 17:48:011094瀏覽

Twig 是个 简单而强力的模板,因为在学习sf 所以看看她。

本文来源http://twig.sensiolabs.org/doc/tags/index.html

 


目前支持的tags包括

    for    if    macro    filter    set    extends    block    include    import    from    use    spaceless    autoescape    raw    flush    do

twig在html分为3种

{{...}} 直接输出其中的变量


{#...#} 注释标签


{%...%} 命令标签,就是我们要学习的这些


for标签
这个最简单,就是循环。

基于数组的循环


Members

 
     
        {% for user in users %} 
           
  • {{ user.username|e }}
  •  
        {% endfor %} 
 

Members



        {% for user in users %}
           
  • {{ user.username|e }}

  •     {% endfor %}

基于数字的循环,特别要注意,这里会输出0-10 也就是11个数字。

 

{% for i in 0..10 %} 
    * {{ i }} 
{% endfor %} 
{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

基于字母的循环


{% for letter in 'a'..'z' %} 
    * {{ letter }} 
{% endfor %} 
{% for letter in 'a'..'z' %}
    * {{ letter }}
{% endfor %}
在循环体内部的变量 

变量名 描述
loop.index 循环的次数(从1开始)
loop.index0 循环的次数(从0开始)
loop.revindex 循环剩余次数(最小值为1)
loop.revindex0 循环剩余次数(最小值为0)
loop.first 当第一次循环的时候返回true
loop.last 当最后一次循环的时候返回true
loop.length 循环的总数
loop.parent 被循环的数组
 

loop.length, loop.revindex, loop.revindex0,loop.last 这几个值只有在被循环的是 php数组 或实现了Countable 接口的类,才有效。


添加一个条件
跟PHP不一样,在循环内部不支持break和continue语句,你只能通过过滤器去跳过一些循环,就像这样


     
        {% for user in users if user.active %} 
           
  • {{ user.username|e }}
  •  
        {% endfor %} 
 

        {% for user in users if user.active %}
           
  • {{ user.username|e }}

  •     {% endfor %}


else 分支
如果 users是个空数组就会输出no user found 。

     
        {% for user in users %} 
           
  • {{ user.username}}
  •  
        {% else %} 
           
  • no user found
  •  
        {% endfor %} 
 

        {% for user in users %}
           
  • {{ user.username}}

  •     {% else %}
           
  • no user found

  •     {% endfor %}

 

按keys循环

Members

 
     
        {% for key in users|keys %} 
           
  • {{ key }}
  •  
        {% endfor %} 
 

Members



        {% for key in users|keys %}
           
  • {{ key }}

  •     {% endfor %}


按keys, values循环


Members

 
     
        {% for key, user in users %} 
           
  • {{ key }}: {{ user.username|e }}
  •  
        {% endfor %} 
 

Members



        {% for key, user in users %}
           
  • {{ key }}: {{ user.username|e }}

  •     {% endfor %}

 

if标签
这个不用多说,直接看例子{% if users %} 
   

     
            {% for user in users %} 
               
  • {{ user.username|e }}
  •  
            {% endfor %} 
       
 
{% endif %} 
 
{% if kenny.sick %} 
    Kenny is sick. 
{% elseif kenny.dead %} 
    You killed Kenny!  You bastard!!! 
{% else %} 
    Kenny looks okay --- so far 
{% endif %} 
{% if users %}
   

            {% for user in users %}
               
  • {{ user.username|e }}

  •         {% endfor %}
       

{% endif %}

{% if kenny.sick %}
    Kenny is sick.
{% elseif kenny.dead %}
    You killed Kenny!  You bastard!!!
{% else %}
    Kenny looks okay --- so far
{% endif %}

 

macro标签
macro(宏标签)类似于其他语言中的函数,常用于填充html标签,以下是一个例子,用来渲染


{% macro input(name, value, type, size) %} 
     
{% endmacro %} 
{% macro input(name, value, type, size) %}
   
{% endmacro %}
macro与函数的不同之处在于:

1、参数的默认值是通过macro块内部的 default过滤器来定义的。

2、参数总是可选的。

另外,就跟php函数一样,macro内部是无法使用外部的变量的。但你可以传递一个特殊变量_context作为参数来获取整个内容。

macro可以被定义在任何的模板内,但在你使用之前需要使用 imported


{% import "forms.html" as forms %} 
{% import "forms.html" as forms %}然后就可以这样使用了


{{ forms.input('username') }}

 

{{ forms.input('password', null, 'password') }}

 

{{ forms.input('username') }}


{{ forms.input('password', null, 'password') }}

如果你要在定义macro的模板里使用,就不需要imported 可以使用特殊变量_self


{{ _self.input('username') }}

 

{{ _self.input('username') }}


如果你要定义一个macro里 包含另一个macro,并且两个macro在同一个文件里,可以使用特殊变量_self


{% macro input(name, value, type, size) %} 
   
{% endmacro %} 
 
{% macro wrapped_input(name, value, type, size) %} 
   

 
        {{ _self.input(name, value, type, size) }} 
   
 
{% endmacro %} 
{% macro input(name, value, type, size) %}
 
{% endmacro %}

{% macro wrapped_input(name, value, type, size) %}
   


        {{ _self.input(name, value, type, size) }}
   

{% endmacro %}
如果两个macro在不同的文件里,你需要使用import


{# forms.html #} 
 
{% macro input(name, value, type, size) %} 
   
{% endmacro %} 
 
{# shortcuts.html #} 
 
{% macro wrapped_input(name, value, type, size) %} 
    {% import "forms.html" as forms %} 
   

 
        {{ forms.input(name, value, type, size) }} 
   
 
{% endmacro %} 
{# forms.html #}

{% macro input(name, value, type, size) %}
 
{% endmacro %}

{# shortcuts.html #}

{% macro wrapped_input(name, value, type, size) %}
    {% import "forms.html" as forms %}
   


        {{ forms.input(name, value, type, size) }}
   

{% endmacro %}


filter标签
就是给整个区块使用过滤器


{% filter upper %} 
    This text becomes uppercase 
{% endfilter %} 
{% filter upper %}
    This text becomes uppercase
{% endfilter %}
{% filter lower|escape %} 
    SOME TEXT 
{% endfilter %} 

摘自 jiaochangyun的专栏

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478461.htmlTechArticleTwig 是个 简单而强力的模板,因为在学习sf 所以看看她。 本文来源http://twig.sensiolabs.org/doc/tags/index.html 目前支持的tags包括 for if macro filter...
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn