twig模板基本学习

 

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 = 0, $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

 

 

 

posted @ 2019-03-02 22:08  _Ennio  阅读(1354)  评论(0编辑  收藏  举报