Twig与symfony那点事

4 篇文章 0 订阅
2 篇文章 0 订阅

Twig介绍

TWIG 模板的主要特性

            高效:Twig将模板编译成了优化了的PHP文件,与原生的PHP代码比较而言,性能损耗非常小。
            安全:Twig使用沙箱(sandbox)模式去运行模板中不被信任的代码。这使得我们可以选择Twig作为那些允许用 户修改模板的应用的模板引擎。
            灵活:Twig具有灵活的语法分析器和语法解析器,它允许开发人员定义自己的标签(tags)和过滤器(filters),并且创建自己的领域特定语言(DSL,domain specific language)。

可用符号:

== != < > >= <= + - ~ / // % * | [] . .. and or not in is b-and b-or b-xor

部分运算符的含义:

            1、 ~   ://连接两个字符串,相当于php中的点号
            2、//   ://整除
            3、**   ://乘方
            4、b-and、b-or、b-xor:按位与、按位或、按位异或
            5、-    ://减法以及去除空白的简写用法 {%- xxxx -%} //去除两边的空白

注释:

 {# 注释内容 #}

数组遍历

   按数组value遍历:
       {% for value in foo %}
           { { value }}
       {% endfor %}
   按数组key遍历:
        {% for key in foo|keys %}
             {{ key }}
        {% endfor %}
   按key,value遍历:
        {% for key, value in foo %}
           {{ key }}:{{ value }}
        {% endfor %}
   如果 foo 非数组,还可以使用else语句,如:
        {% for key, value in foo %}
            {{ key }}:{{ value }}
        {% else %}  
            foo is Not a Array
        {% endfor %}
   也可以直接带条件,遍历二维数组时比较有用,可用value.field来判断:
        {% for key, value in foo if value == 1 %}
            {{ key }}:{{ value }}
        {% endfor %}

循环体内部变量:

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

条件语句:

     需要使用 or 和 and 代替 ||、&&
            {% if a == '1' or b == '2' %}
                a = 1 or b = 2
            {% endif %}
     判断变量是否定义
            {% if var is not defined %}
                    do something
            {% endif %}
                    是否为NULL
            {% if var is null %}
                    do something
            {% endif %}
                     是否为false
            {% if var is sameas(false) %}
                    do something
            {% endif %}
     解析定界符 
            {{ '{{' }}

            {% raw %}
            <ul>
                {% for item in seq %}
                <li>{ { item }}</li>
                {% endfor %}
            </ul>
            {% endraw %}     

控制结构:##

    {% macro %} XXX {% endmacro%} //定义宏以便多次调用,与定义php函数无异
    {% block xxx %} 或 {% block %} xxx {% endblock %}//定义代码块或覆盖代码块,相当于占位符,当被另一个模板继承时,可以调用这个模块。
                                                     //定义时的内容在继承的模板中默认是不会出现的,可以使用 {{ parent() }} 来显示
    {% import "macro.html.twig" as web_macro %} //导入宏模板macro.html.twig并设置别名为web_macro
    {% from aaa import bbb as ccc %} //从指定的aaa模板导入宏bbb并设置别名为ccc
    {% set aaa=bbb %}  //在模板内定义变量
    {% sqaceless %} {% endspaceless %} //去除html片段中的空格
    {% autoescape %}  //将字符串安全的处理成合法的指定数据(true 启用|false 禁用)
                      //相关用法
                      {% autoescape true %}
                            {{ var }}         {# 将会以文本的形式输出 #}
                            {{ var|raw }}     {# 将会以 html 标签的形式输出 #}
                            {{ var|escape }}  {# 将会以文本的形式输出 #}
                       {% endautoescape %}

Twig在symfony中的使用

如何在Twig中通过app变量访问到User, Request, Session和更多对象

                在每个请求中,Symfony将会在Twig引擎和PHP引擎默认设置一个全局模板变量app。该app变量是一个GlobalVariables实例,它将让你自动访问到程序一些特定的变量。比如:
                      app.user
                 表示当前用户对象,如果没有就是null。这个变量中存储的值,可以是一个UserInterface对象,任何实现了__toString()方法的对象,或者甚至是一个常规字符串。 object, any other object which implements a __toString() method or even a regular string.
                       app.request
                 这个Request 对象就是当前请求对象(取决于你的程序,它可能是一个子请求或者是一个常规请求,后面会解释)
                        app.session
                  这个Session对象表示当前用户的session,如果没有就是null。
                        app.environment
                  当前程序的环境名称(dev, prod, 等等).
                        app.debug
                  如果在debug模式下就是true,false则不是。
                  示例:
                  <p>Username: {{ app.user.username }}</p>
                    {% if app.debug %}
                            <p>Request method: {{ app.request.method }}</p>
                            <p>Application Environment: {{ app.environment }}</p>
                    {% endif %}

如何注入变量到所有的模板(全局Twig变量):

                 有时候,你希望变量能够进入你所使用的所有模板。在你的app/config/config.yml文件中设置就    可以做到: 
                      # app/config/config.yml
                       twig:
                           # ...
                           globals:
                                   ga_tracking: UA-xxxxx-x
                      现在,在所有的Twig模板中都可以使用ga_tracking 变量了:   
                           <p>The google tracking code is: {{ ga_tracking }}</p>

                  使用服务容器参数:
                        你也可以利用内置的服务参数系统,他可以让你独立和重用这个值,这个相同的变量使用和以前一样。:
                               # app/config/parameters.yml
                                parameters:
                                         ga_tracking: UA-xxxxx-x

                               # app/config/config.yml
                                 twig:
                                    globals:
                                           ga_tracking: '%ga_tracking%'

                   引用服务:
                        除了使用静态值,您还可以将该值设置为服务。每当全局变量在模板中被访问,就从服务容器中请求服务,并获取该对象。

                        这个服务不会延迟加载。换句话说,当Twig一被加载,即使你从来都没使用过这个全局变量,您的服务也会被实例化。

                        要定义一个服务为全局Twig变量,字符串前缀应该为@。这应该感到熟悉,因为你在服务容器中也使用相同的语法。
                            # app/config/config.yml
                              twig:
                                  # ...
                                  globals:
                                        user_management: '@app.user_management'

symfony中文官网
twig官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值