一、基本使用

{{ demo }}输出一个demo变量;

{% func %}通常是包含一个twig函数例如 for;

举个for循环的例子:

{% for i in 0..10 %}

  <em>{{ i }}</em>

{% endfor %}

当然也可以打印对象,例:

{% for user in users %}

<span>user.username</span>

{% endfor %}

注:users是从控制器中传来的对象参数

{{# #}}注释;

{{ demo | upper }} 将demo转化为大写,这是一个过滤器的例子;

二、模版继承

在app/Resources/views目录下默认会有一个base.html.twig

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}{% endblock %}
</body>
</html>

然后将自己的模版文件继承此

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

{% block title %}My cool blog posts{% endblock %}

{% block body %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}

::base.html.twig表示此文件放在app/Resources/view目录下

注:{% extends %}必须放在第一行,当使用{% block body %}时,body这个块中所有都被覆盖,若想保留用parent()函数例:

{% block body %}

<h3>This is childContent</h3> ...

{{ parent() }}

{% endblock %}

三、模版不同命名方式的存储路径:

AcmeBlogBundle::layout.html.twig:这个语法指定了一个AcmeBlogBundle的基本模板。因为中间部分“controller”被忽略了(如Blog),模板路径位于AcmeBlogBundle中的Resources/views/layout.html.twig

::base.html.twig:这个语法指定了一个应用程序范围的模板或布局。注意该字符串由两个冒号(::)开始,意思是bundle和controller部分被忽略。这意味着该模板没有位于任何Bundle之中,因此它应该位于app/Resources/views/目录中

四、模版包含

(1)一个模版文件中包含另外的模版文件

{% include 'AcmeArticleBundle:Article:articleDetails.html.twig' with {'article': article} %}

如果with多个参数可以{'foo':foo, 'bar':bar}

(2)一个模版文件包含另外一个控制器的结果

{% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}

注:两者区别在于include是将参数article传给了articleDetails.html.twig中的article参数,而render是将max参数传给了recntArticle这个控制器

五、其他帮助函数

(1)根据路由名生成url链接:

生成相对路径:<a href="{{ path('article_show', { 'slug': article.slug }) }}">

生成绝对路劲:<a href="{{ url('homepage') }}">Home</a>

在php模版中用<a href="<?php echo $view['router']->generate('homepage', array(), true) ?>">Home</a>(symony1中是使用url_for)

(2)连接向css、js、iamge等资源:

<img src=\'#\'" asset('images/logo.png') }}" alt="Symfony!" />

<link href="{{ asset('css/blog.css') }}" rel="stylesheet" type="text/css" />

引:asset函数的主要目的是将你的应用程序更容易移植。如果你的应用程序在你主机的根目录下(如:http://example.com),然后被渲染的路径将是/images/logo.png。但如果你的应用程序是在子目录下(如:http://example.com/my_app),每个asset路径都将渲染成带子目录的(如:/my_app/images/logo.png)。asset函数要小心这一点,决定如何使用你的应用程序并并据此生成正确的路径

(3)配置和使用模版引擎:

配置和使用模板服务

在Symfony2中模板系统的核心是模板引擎。这个特定的对象负责渲染模板并返回它的内容。当你在控制器中渲染一个模板时,举个例子,你其实是在使用模板引擎服务。如:

return $this->render('AcmeArticleBundle:Article:index.html.twig');

等同于

$engine = $this->container->get('templating'); $content = $engine->render('AcmeArticleBundle:Article:index.html.twig'); return $response = new Response($content);

模板引擎(或“服务”)被预配置成在Symfony2中自动工作。当然它可以在应用程序配置文件中配置。

# app/config/config.yml framework: # ... templating: { engines: ['twig'] }

六、模版复写

Symfony2总是先查找位于app/Resources/BUNDLE_NAME/views/目录的模板。如果该模板不存在,它将继续在Bundle自己内部的Resources/views目录中查找。所以可以将模版文件写在app/Resources/BUNDLE_NAME/views/目录下来覆盖Bundle自己内部的Resources/views目录下的模版文件。

因为Symfony2框架自身也是一个Bundle,核心模板也可以用同样的方式覆写。举个例子,核心的FrameworkBundle包含着大量的“异常”和“错误”模板。要覆写它们,可以将它们从FrameworkBundle的Resources/views/Exception目录中拷贝到,正如你所想,app/Resources/FrameworkBundle/views/Exception目录中。(这个比较实用)

七、输出转义

为了防止XSS攻击需要转义输出,在symfony2 Twig模版引擎中输出转义是默认开启的,php模版引擎不开启

在某些案例中,当正在渲染一个被信任变量和不能被清理的标识时,你需要取消输出清理。假设管理用户可以写包含HTML代码的文章。缺省状态下,Twig将清理文章内容。要正常地渲染它,添加raw过滤器:{{ article.body | raw }}。

为了创建包含格式参数的链接,在参数的哈希数组中包括_format关键词:

<a href="{{ path('article_show', {'id': 123, '_format': 'pdf'}) }}">This is PDF</a>

Symfony2模版引擎使用说明手册的更多相关文章

  1. PHP模版引擎 – Twig

    在网站开发过程中模版引擎是必不可少的,PHP中用的最多的当属Smarty了.目前公司系统也是用的Smarty,如果要新增一个页面只需把网站的头.尾和左侧公共部分通过Smarty的include方式引入 ...

  2. 构建自己的PHP框架--构建模版引擎(1)

    前段时间太忙,导致好久都没有更新博客了,今天抽出点时间来写一篇. 其实这个系列的博客很久没有更新了,之前想好好规划一下,再继续写,然后就放下了,今天再捡起来继续更新. 今天我们来说一下,如何构建自己的 ...

  3. Smarty模版引擎的原理

    Smarty是一个使用php写出来的模版引擎,用来将原本与html代码混杂在一起PHP代码逻辑分离,实现前后端分离. Smarty模板优点: 1. 速度:采用Smarty编写的程序可以获得最大速度的提 ...

  4. js模版引擎handlebars.js实用教程——为什么选择Handlebars.js

    返回目录 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是: ...

  5. 简单JavaScript模版引擎优化

    在上篇博客最简单的JavaScript模板引擎 说了一下一个最简单的JavaScript模版引擎的原理与实现,作出了一个简陋的版本,今天优化一下,使之能够胜任日常拼接html工作,先把上次写的模版函数 ...

  6. Asp.net NVelocity 模版引擎

    NVelocity.dll是Java中常用的一个模版,下面是常用的模版引擎 1,返回string类型的html代码 /// <summary> /// 获取html模版 /// </ ...

  7. Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs

    目录 前言 Express简介和安装 运行第一个基于express框架的Web 模版引擎 ejs express项目结构 express项目分析 app.set(name,value) app.use ...

  8. T4教程1 T4模版引擎之基础入门

    T4模版引擎之基础入门   额,T4好陌生的名字,和NuGet一样很悲催,不为世人所熟知,却又在背后默默无闻的奉献着,直到现在我们项目组的人除了我之外,其它人还是对其豪无兴趣,基本上是连看一眼都懒得看 ...

  9. T4教程2 T4模版引擎之生成数据库实体类

    T4模版引擎之生成数据库实体类   在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中 ...

随机推荐

  1. c# WebBrower 与 HttpRequest配合 抓取数据

    今天研究一个功能,发现一个问题. 通过webbrower模拟用户自动登录可以完成,并且可以取到相对应的页面内容. 但是如果页面中通过ajax,动态加载的内容,这种方式是取不到的,于是用到了httpRe ...

  2. JS获取各种浏览器窗口大小的方法

    常用:JS 获取浏览器窗口大小复制代码 代码如下:// 获取窗口宽度if (window.innerWidth)winWidth = window.innerWidth;else if ((docum ...

  3. php数字补零的两种方法

    在php中有两个函数——至少有两个是否有其他的我还不知道,能够实现数字补零,str_pad(),sprintf()详细如下 str_pad顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任 ...

  4. 解析html并使用canvas进行渲染

    在学习html5的时候,使用canvas实现了对html文本的解析和渲染,支持的tag有<p>.<i>.<b>.<u>.<ul>.<l ...

  5. botbrew下写glib2程序

    作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 ...

  6. .Net MVC中的路由

    MVC中的URL也就是路由,不用通过路径访问实际的物理文件而达到向用户展示界面. URL的路由功能 一方面正向 映射到Controller和Action,根据用户输入的URL触发相应的控制器和对应方法 ...

  7. 使用knockout-sortable实现对自定义菜单的拖拽排序

    在开始之前,照例,我们先看效果和功能实现. 关于自定义菜单的实现,这里就不多说了,需要了解的请访问:http://www.cnblogs.com/codelove/p/4838766.html 这里需 ...

  8. 深入理解Ember-Data特性(上)

    写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...

  9. 【WPF】如何把一个枚举属性绑定到多个RadioButton

    一.说明 很多时候,我们要把一个枚举的属性的绑定到一组RadioButton上.大家都知道是使用IValueConverter来做,但到底怎么做才好? 而且多个RadioButton的Checked和 ...

  10. 【转】yahoo前端优化军规

    雅虎给出了前端优化的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像). Minimize HTTP Requests 减少http请求 图片.css ...