一、基本使用

{{ 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>

转载于:https://www.cnblogs.com/orlion/p/4782263.html

Symfony2模版引擎使用说明手册相关推荐

  1. php框架里有模版引擎吗,Yii框架用模版引擎了吗?_PHP开发框架教程

    Yii框架用模版引擎了吗? Yii框架没有用模版引擎,Yii照样采纳原始PHP作为模板语法,该框架是一个基于组件的高性能PHP框架,用于开发大型Web运用,而且采纳严厉的OOP编写,并供了Web运用开 ...

  2. Play 2.0 用户指南 - 模版引擎 -- 针对Scala开发者

    2019独角兽企业重金招聘Python工程师标准>>> 一个基于Scala的类型安全的模版引擎 Play2.0带来了一个全新的真正强大的基于Scala的模版引擎.该引擎的设计灵感源于 ...

  3. 黄聪:VS2010开发T4模版引擎之基础入门

    原文:http://www.cnblogs.com/lzrabbit/archive/2012/07/15/2591085.html 额,T4好陌生的名字,和NuGet一样很悲催,不为世人所熟知,却又 ...

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

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

  5. laravel 模版引擎使用

    laravel 模版引擎以 @标签 开头,以 @end标签 结尾,常用有 foreach foreachelse if for while等 1)foreach 和 foreachelse 差不到,区 ...

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

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

  7. thymeleaf依赖_玩转SpringBoot集成 Thymeleaf 模版引擎

    随着互联网技术的发展,在前后端分离开发模式已经逐渐成为主流的今天,前后端技术的划分也越来越清晰,社会分工进一步细化,职业岗位也更加细分,慢慢开始就有了前端攻城狮和后端攻城狮,技术也进一步细分,出现了以 ...

  8. 自制代码生成器 多种模版引擎 支持生成各种代码

    自制代码生成器 多种模版引擎 支持生成各种代码 支持多种数据库 工作三年了  一直伴随本人的代码生涯 贡献之大 可想而知 过程中 它也经历了各种进货 1.先来看看界面 主界面 连接数据库  支持多种主 ...

  9. 前端模版引擎选择指南

    Javascript前端模板引擎将数据和结构分离开来,是前端发展路上关键的一环.本文将对比jade,ejs,swig,handlerbars这四种现在常用的模版引擎来为大家提供一些帮助. 语法对比 这 ...

最新文章

  1. ateq测漏仪f620说明书_手环测漏仪规格齐全-同江
  2. Jetson Xavier NX上安装scipy报错:numpy.distutils.system_info.NotFoundError: No lapack/blas resources found
  3. eplan增加其他到工具栏_EPLAN增效之工具栏定制(十三:端子排编辑不进导航器)
  4. Spring MVC 使用拦截器 HiddenHttpMethodFilter配置Rest风格的URL
  5. SQL 列转行、行转列 - 使用sqlite演示
  6. 5分钟学会区块链 - 开发一条区块链 Develop BlockChain with Tendermint
  7. Kaggle入门 (Titanic XGBoost)
  8. box-sizing的使用
  9. socket结构和几个IP地址转换函数
  10. hadoopshpython_让python在hadoop上跑起来
  11. python itchat_Python使用itchat获取微信好友
  12. 滴滴翻译技术探索与实践
  13. java将sql数据转xml文件_把从SQL中取出的数据转化成XMl格式
  14. 404页面是什么意思?怎么正确设置?
  15. INS防封号技巧,这些注意事项如果你不知道容易被封号停用
  16. 如何证明二元函数的连续性 可…
  17. myeclispe 中deploy时不能出现deploy location?
  18. C++ 开源游戏服务器框架
  19. Unity 给手游用的高性能辉光(Bloom) Shader
  20. 如何杀除Trojan.win32.Thsys病毒

热门文章

  1. python旅游推荐系统_如何用Python搭建一个简单的推荐系统?
  2. java 图片导出_java导出含图片的word
  3. excel mysql实时交换数据_Excel与数据库的数据交互
  4. android contacts电话查询头像,android透过查询电话号码获取联系人头像
  5. java双等号和equals_JAVA编程基础篇:hashCode的特性和作用
  6. 钉钉微应用怎么进入_钉钉微应用开发免登流程
  7. mysql的增量备份方法_Mysql 增量备份,全部备份实现方法以及自动化脚本
  8. python 测试mysql数据库_Python操作MySQL数据库----继续安装和测试
  9. 前端HTML5CSS3动画
  10. Spring期末试题