twig模板基本学习
twig基本语法
1.输出 {{ }}
2.判断 {% %}
3.注释 {# #}
具体使用时参考https://twig.symfony.com/doc/2.x/官网文档进行查询
twig的核心概念是用类的继承来实现各个页面,构成其间的结构关系 ---------重要!!!!!
twig也是用来输出html代码的一种语言,更为清楚和简单
下面用慕课网来进行说明
可以看到慕课网有就业办,实战课程,等几个子网页,这些子网页都是分为三部分,中间正文,开头和结尾,他们的开头和结尾都是一样的,所以可以这样设计
首先设计一个抽象基类类,有三个方法,
abstract public BasePage{
public function getHeader(); //获取页面头部
public function getMainText(); //获取页面正文
public function getTail(); //获取页面尾部
}
接下来,各个子页面都可以继承该基类,使用它的getHeader 和 getTail方法,重写getMainText方法,比如问答页面来说,
class QuestionPage extends BasePage{
public function getMainText()
{
// TODO: Implement getMainText() method.
return $this->getQuestion().$this->getRightMenu().$this->getTopMenu();
}
public function getTopMenu(){}
public function getRightMenu(){}
public function getQuestion(){}
}
可以看到继承了BasePage类,这样子就只需要编写和BasePage页面不同的内容即可,这里问答页面由上面和右侧的菜单,还有中间的正文问题,可以看到还有等我回答,热门回答等几个不同的页面
这几个页面之间,他们的上侧菜单都是相同的,但是右侧菜单是不相同的,这样以书写一个最新回答页面为例来讲,
class NewQuestion extends QuestionPage{
public $content; //具体内容
public function getRightMenu(){} //右侧菜单内容不同,改变这一点即可
}
可以看到具体内容不同,所以重新定义了$content变量,这样getQuestion时就能返回不同的内容,然后右侧菜单不同,所以重写右侧菜单函数即可
大概就是这样的意思,依次推进,提取其中相同的特性,确定类之间的继承关系,这样子代码的可扩展性更高并且更好去维护,并且像相同的页面的Session缓存时间要长一些, 而像每个页面不同的部分的缓存时间就短一些
,可以进行不同的设置
下面对twig在symfony3之中的使用进行说明,
1.生成过滤器
使用getfilter
/ src/Twig/AppExtension.php
namespace App\Twig; use Twig\Extension\AbstractExtension;
use Twig\TwigFilter; class AppExtension extends AbstractExtension
{
public function getFilters() //过滤函数
{
return [
new TwigFilter('price', [$this, 'formatPrice']), //使用函数formatPrice进行过滤,并且将过滤产生的对象赋给price
];
} public function formatPrice($number, $decimals = , $decPoint = '.', $thousandsSep = ',')
{
$price = number_format($number, $decimals, $decPoint, $thousandsSep);
$price = '$'.$price; return $price;
}
记录一个小注释
{@inheritdoc} 将父类注释都继承下来
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction; class AppExtension extends AbstractExtension
{
public function getFunctions()
{
return [
new TwigFunction('area', [$this, 'calculateArea']), //计算面积,将值返回给area
];
} public function calculateArea(int $width, int $length)
{
return $width * $length;
}
暂时不明白这两种方式有什么区别
注册扩展时有两种方法,
php bin/console debug:twig --filter=price //这种只会更新filter的
php bin/console debug:twig //这种会将functions和filter的都更新
dsa
dsa打
打
=price
twig模板基本学习的更多相关文章
- twig模板的进一步学习以及在symfony当中的使用
首先,twig可以理解为用于输出html代码的,虽然用PHP等其他语言也可以输出,但是twig更为简洁高效,同时twig模板被编译成原生的php类缓存起来,所以才会这么快, 其实twig跟php类差不 ...
- 原生twig模板引擎详解(安装使用)
最近在学习SSTI(服务器模板注入),所以在此总结一下 0x00 Twig的介绍 什么是Twig? Twig是一款灵活.快速.安全的PHP模板引擎. Twig的特点? 快速:Twig将模板编译为纯粹的 ...
- opencart 引入 TWIG 模板引擎
1.首先将 twig 包放入 system\library 目录. 2.在 system/startup.php 文件最后添加引入语句. require_once(DIR_SYSTEM . 'lib ...
- (转)DEDECMS模板原理、模板标签学习 - .Little Hann
本文,小瀚想和大家一起来学习一下DEDECMS中目前所使用的模板技术的原理: 什么是编译式模板.解释式模板,它们的区别是什么? 模板标签有哪些种类,它们的区别是什么,都应用在哪些场景? 学习模板的机制 ...
- NVelocity模板引擎学习笔记
NVelocity模板引擎学习笔记 学习模板引擎有一段时间现在做一些总结
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2): ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- symfony注册Twig模板中使用自定义PHP方法
// 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档// 官方文档,https://symfony.com/doc/2.8/templating/twig_extension.html// ...
- 构建自己的PHP框架(Twig模板引擎)
完整项目地址:https://github.com/Evai/Aier Twig 模板引擎 模版引擎 twig 的模板就是普通的文本文件,也不需要特别的扩展名,.html .htm .twig 都可以 ...
随机推荐
- Codeforces #381(div2)
A.题目:http://codeforces.com/contest/740/problem/A 题意:现有n本书,买一本书需要花a元,两本书b元,三本书c元,问买够书是4的倍数所需要的最小花费 思路 ...
- C-static,auto,register,volatile
static 一:静态,意思就是呆在一个地方,不想动,大概就是编译期间就确定地址了.首先了解下C中的进程内存布局: 1)正文段(.text)——CPU执行的机器指令部分:一个程序只有一个副本:只读,防 ...
- 修改已有git仓库的远程仓库指向
$ git remote set-url origin git@github.com:test/thinkphp.git 或者 $ git config -e 直接编辑其中origin的url就行了, ...
- adb调试
adb usb调试,adb网络调试是非常实用的工具,通过电脑连接手机达到文件传输.电脑端安装app刷机等功能材料: 材料: 1.电脑端安装号对应手机的驱动程序 2.电脑端下载好adb调试工具 3.手机 ...
- 【洛谷P3605】晋升者计数
题目大意:给定一棵 N 个点的树,点有点权,求对于每个点来说,以该点为根的子树内比该点点权小的点的个数. 题解:考虑对于每个点开一棵权值线段树.递归过程中,将子树的信息合并到父节点上,统计答案后,再将 ...
- python之OpenCv(四)---人脸识别
对特定图像进行识别,最关键的是要有识别对象的特征文件.OpenCV已经内置了人脸识别特征文件,我们只要使用OpenCV的CascadeClassifier类即可进行识别. 语法: https://gi ...
- 金融量化分析【day112】:量化平台的使用-下单函数
order - 按股数下单 1.代码 # 导入函数库 import jqdata #初始化函数,设定基准等等 def initialize(context): set_benchmark('00030 ...
- 监控c3p0的连接池
SqlSession session = SessionFactory.getSqlSession(dbid); List<Map<String, Object>> resul ...
- Angular记录(2)
文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...
- jquery 倒计时效果
function daojishi(){ var starttime = new Date("2017-09-30 01:06:11"); //date的格式也可以写成:" ...