首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Twig 模板引擎入門教程:安裝配置、核心 API、模板繼承與自定義擴展

     編輯:PHP 相關知識

Twig 模板引擎入門教程:安裝配置、核心 API、模板繼承與自定義擴展

Twig 是 Symfony 專案孵化的現代 PHP 模板引擎,以「快速、安全、靈活」著稱。編譯為優化 PHP 代碼效能損耗極低;沙箱模式保障非受信模板安全;靈活的語法解析器支援自定義標籤、過濾器、函數與 DSL。本文涵蓋安裝方式、核心 API 用法、檔案系統載入器與快取配置。

環境需求與安裝方式

  • PHP ≥ 5.2.4(現代專案建議 PHP 7.4+)
  • 壓縮包安裝:官網下載 → 解壓 → 放入專案可訪問路徑
  • Git 安裝開發版:git clone git://github.com/fabpot/Twig.git
  • Composer 安裝(推薦):composer require "twig/twig:^3.0"
  • PEAR 安裝:pear channel-discover pear.twig-project.org && pear install twig/Twig

核心 API 快速上手

字串載入器(適合簡單場景)

<?php
require_once '/path/to/vendor/autoload.php'; // Composer 自動載入
$loader = new \Twig\Loader\ArrayLoader([
    'index' => 'Hello {{ name }}!',
]);
$twig = new \Twig\Environment($loader);
echo $twig->render('index', ['name' => 'Fabien']); // Hello Fabien!

檔案系統載入器(標準專案模式)

<?php
require_once '/path/to/vendor/autoload.php';
$loader = new \Twig\Loader\FilesystemLoader('/path/to/templates');
$twig = new \Twig\Environment($loader, [
    'cache'       => '/path/to/compilation_cache', // 啟用快取,生產環境必須
    'debug'       => true,
    'auto_reload' => true, // 開發環境自動重新編譯
    'strict_variables' => true, // 未定義變數拋異常
]);
$template = $twig->load('index.html.twig');
echo $template->render(['title' => '首頁', 'items' => $items]);

Twig 核心語法速查

語法說明範例
{{ var }}輸出變數(自動 HTML 轉義){{ user.name }}
{% if %}...{% endif %}條件判斷{% if user.active %}...{% endif %}
{% for item in items %}...{% endfor %}迴圈{% for p in posts %}{{ p.title }}{% endfor %}
{% extends 'base.html.twig' %}模板繼承子模板覆寫區塊
{% block content %}...{% endblock %}定義可覆寫區塊父模板預留位置
{{ var|filter }}過濾器管道{{ name|upper|escape }}
{{ function() }}函數呼叫{{ path('home') }}
{% include 'partial.html.twig' %}引入局部模板複用片段

模板繼承實戰:佈局與區塊

父模板 base.html.twig

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}預設標題{% endblock %}</title>
    {% block stylesheets %}{% endblock %}
</head>
<body>
    <header>{% block header %}網站標頭{% endblock %}</header>
    <main>{% block content %}{% endblock %}</main>
    <footer>{% block footer %}版權所有{% endblock %}</footer>
    {% block javascripts %}{% endblock %}
</body>
</html>

子模板 article.html.twig

{% extends 'base.html.twig' %}
{% block title %}{{ article.title }} - 我的部落格{% endblock %}
{% block content %}
    <article>
        <h1>{{ article.title }}</h1>
        <div class="meta">發布於 {{ article.published_at|date('Y-m-d') }}</div>
        <div class="body">{{ article.content|raw }}</div>
    </article>
{% endblock %}

自定義擴展:Filter、Function、Tag、Global

<?php
$twig = new \Twig\Environment($loader);
$twig->addFilter(new \Twig\TwigFilter('price', function ($number, $currency = 'TWD') {
    return number_format($number, 0) . ' ' . $currency;
}));
$twig->addFunction(new \Twig\TwigFunction('asset', function ($path) {
    return '/assets/' . ltrim($path, '/');
}));
$twig->addGlobal('site_name', 'My Awesome Site');
// 進階:自定義 Tag 需實作 TokenParser 與 Node 類別

整合 CodeIgniter 專案建議

  1. 將 Twig 庫置於 application/third_party/Twig/
  2. 在 application/libraries/Twig.php 建立薄封裝(參考「CodeIgniter 整合第三方類庫實戰」一文)
  3. 配置 application/config/twig.php 管理模板路徑、快取目錄、副檔名
  4. 視圖檔改以 .twig 結尾,享受自動轉義、繼承、區塊等現代模板特性

延伸閱讀

Twig 以優雅語法、編譯優化、沙箱安全三大特性,成為現代 PHP 專案模板層的首選。掌握核心 API、檔案載入器、快取策略與自定義擴展,即可在任何框架(或無框架)專案中輕鬆落地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved