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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM