twig基本語法
1.輸出 {{ }}
2.判斷 {% %}
3.注釋 {# #}
具體使用時參考https://twig.symfony.com/doc/2.x/官網文檔進行查詢
twig的核心概念是用類的繼承來實現各個頁面,構成其間的結構關系 ---------重要!!!!!
twig也是用來輸出html代碼的一種語言,更為清楚和簡單
下面用慕課網來進行說明
可以看到慕課網有就業辦,實戰課程,等幾個子網頁,這些子網頁都是分為三部分,中間正文,開頭和結尾,他們的開頭和結尾都是一樣的,所以可以這樣設計
首先設計一個抽象基類類,有三個方法,
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