zoukankan      html  css  js  c++  java
  • 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 AppTwig;
    
    use TwigExtensionAbstractExtension;
    use TwigTwigFilter;
    
    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 TwigExtensionAbstractExtension;
    use TwigTwigFunction;
    
    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
     
  • 相关阅读:
    haproxy tcp 反向代理
    c# 字节高低位
    Mac Launchpad图标调整
    vsftp 777权限
    centos7下tomcat7 或tomcat8启动超慢原因
    mysql连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link
    Mac mysql 运行sql文件中文乱码的问题
    Mac Mysql [ERR] 2006
    记一次部署java项目的问题
    典型的响应式布局实例代码
  • 原文地址:https://www.cnblogs.com/eenio/p/10463244.html
Copyright © 2011-2022 走看看