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. 「【算法进阶0x30】数学知识A」作业简洁总结

    t1-Prime Distance 素数距离 大范围筛素数. t2-阶乘分解 欧拉筛素数后,按照蓝皮上的式子筛出素数. 复杂度:O(nlogn) t3-反素数ant 搜索 t4-余数之和 整除分块+容 ...

  2. Python--logging模块不同级别写入到不同文件

    将不同级别的logging 日志信息写入到不同文件 # -*- coding: utf-8 -*- import os import time import logging import inspec ...

  3. python学习day14 装饰器(二)&模块

    装饰器(二)&模块 #普通装饰器基本格式 def wrapper(func): def inner(): pass return func() return inner def func(): ...

  4. Pack

    背包专题 背包吼哇! 基础的背包分为OI01背包,完全背包,多重背包,二维背包,分组背包,树形背包,求方案数等.......... 作为DP的一个基础部分还是有必要写一写的. 01背包: 一个物品能取 ...

  5. opencv-python下简单KNN分类识别

    KNN是数据挖掘中一种简单算法常用来分类,此次用来聚类实现对4种花的简单识别. 环境:python2.7+opencv3.0+windows10 原理:在使用KNN函数提取出4种花特征点以后,对需要辨 ...

  6. POJ 3186 Treats for the Cows (动态规划)

    Description FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for gi ...

  7. bootstrap浅谈

    学习地址:http://www.runoob.com/bootstrap/bootstrap-tutorial.html 自己练习了下 主要是使用了bootstrap中包含的class类样式,只要给相 ...

  8. Python读写文件的几种方式

    一.pandas pandas模块是数据分析的大杀器,它使得对于文件相关的操作变得简单. 看一下它的简单使用 import pandas as pd # 读取 df = pd.read_csv('al ...

  9. UIWebView代码注入时机与姿势

    一个奇怪的业务场景,引发的胡乱思考 问题其实不难解决,只是顺着这个问题,发散出了一些有意思的东西 本文旨在讨论UIWebView,WKWebView有自己的机制,不用这么费劲 我们的业务最大的最重要的 ...

  10. 2.6 if嵌套

    if嵌套 通过学习if的基本用法,已经知道了 当需要满足条件去做事情的这种情况需要使用if 当满足条件时做事情A,不满足条件做事情B的这种情况使用if-else 想一想: 坐火车或者地铁的实际情况是: ...