twig模板基本学习

时间:2023-12-16 14:30:08

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