twig基本语法

1.输出 {{    }}

2.判断 {%    %}

3.注释 {#      #}

具体使用时参考https://twig.symfony.com/doc/2.x/官网文档进行查询

twig的核心概念是用类的继承来实现各个页面,构成其间的结构关系    ---------重要!!!!!

twig也是用来输出html代码的一种语言,更为清楚和简单

下面用慕课网来进行说明

https://class.imooc.com/

可以看到慕课网有就业办,实战课程,等几个子网页,这些子网页都是分为三部分,中间正文,开头和结尾,他们的开头和结尾都是一样的,所以可以这样设计

首先设计一个抽象基类类,有三个方法,

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模板基本学习的更多相关文章

  1. twig模板的进一步学习以及在symfony当中的使用

    首先,twig可以理解为用于输出html代码的,虽然用PHP等其他语言也可以输出,但是twig更为简洁高效,同时twig模板被编译成原生的php类缓存起来,所以才会这么快, 其实twig跟php类差不 ...

  2. 原生twig模板引擎详解(安装使用)

    最近在学习SSTI(服务器模板注入),所以在此总结一下 0x00 Twig的介绍 什么是Twig? Twig是一款灵活.快速.安全的PHP模板引擎. Twig的特点? 快速:Twig将模板编译为纯粹的 ...

  3. opencart 引入 TWIG 模板引擎

     1.首先将 twig 包放入 system\library 目录. 2.在 system/startup.php 文件最后添加引入语句. require_once(DIR_SYSTEM . 'lib ...

  4. (转)DEDECMS模板原理、模板标签学习 - .Little Hann

    本文,小瀚想和大家一起来学习一下DEDECMS中目前所使用的模板技术的原理: 什么是编译式模板.解释式模板,它们的区别是什么? 模板标签有哪些种类,它们的区别是什么,都应用在哪些场景? 学习模板的机制 ...

  5. NVelocity模板引擎学习笔记

    NVelocity模板引擎学习笔记 学习模板引擎有一段时间现在做一些总结

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2): ...

  7. 中小研发团队架构实践之生产环境诊断工具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如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  8. symfony注册Twig模板中使用自定义PHP方法

    // 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档// 官方文档,https://symfony.com/doc/2.8/templating/twig_extension.html// ...

  9. 构建自己的PHP框架(Twig模板引擎)

    完整项目地址:https://github.com/Evai/Aier Twig 模板引擎 模版引擎 twig 的模板就是普通的文本文件,也不需要特别的扩展名,.html .htm .twig 都可以 ...

随机推荐

  1. java并发编程实践——王宝令(极客时间)学习笔记

    1.并发 分工:如何高效地拆解任务并分配给线程 同步:线程之间如何协作 互斥:保证同一时刻只允许一个线程访问共享资源 Fork/Join 框架就是一种分工模式,CountDownLatch 就是一种典 ...

  2. 【dfs】P1433 吃奶酪

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  3. 图论(最短路&最小生成树)

    图论 图的定义与概念 图的分类 图,根据点数和边数可分为三种:完全图,稠密图与稀疏图. 完全图,即\(m=n^2\)的图\((m\)为边数,\(n\)为点数\()\).如: 1 1 0 1 2 1 1 ...

  4. java 11 不可修改集合API

    不可修改集合API 自 Java 9 开始,Jdk 里面为集合(List/ Set/ Map)都添加了 of 和 copyOf 方法,它们两个都用来创建不可变的集合,来看下它们的使用和区别. 示例1: ...

  5. python 实现进制转换(二进制转十进制)

    摘自https://baike.baidu.com/item/%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E4%BA%8C%E8%BF%9B%E5%88%B6 pytho ...

  6. Java多线程_复习(更新中!!)

    java多线程的常见例子 一.相关知识: Java多线程程序设计到的知识: (一)对同一个数量进行操作 (二)对同一个对象进行操作 (三)回调方法使用 (四)线程同步,死锁问题 (五)线程通信 等等 ...

  7. GIT-常规操作

    本地安装git, 安装文件: Git客户端: 可百度搜索:GIT64位或GIT32位等关键字找到相应的版本进行下载. 本地地址:D:\20-git\Git-2.20.1-64-bit.exe 也可百度 ...

  8. Git以及TortoiseGit的下载安装使用

    Git以及TortoiseGit的下载安装使用 下载git 下载地址:https://git-scm.com/然后进行一系列的安装,傻瓜式的操作即可 TortoiseGit Tortoise 英[ˈt ...

  9. Python“函数式编程”中常用的函数

    1.map(func,seq[,seq,...]) 对序列中的每个元素应用函数,python2中map()返回的是列表,python3中返回的是迭代器,可以用list()转换成列表.以下例子为pyth ...

  10. 2.7 if应用:猜拳游戏

    应用:猜拳游戏 <1>运行效果: <2>参考代码: import random player = input('请输入:剪刀(0) 石头(1) 布(2):') player = ...