Twig
概要
編集Twigは、PHPのための柔軟で安全、かつ高速なテンプレートエンジンです。Symfonyプロジェクトの一部として開発され、シンプルで表現力豊かな構文を特徴としています。
インストールと設定
編集Composerでのインストール
編集composer require "twig/twig:^3.0"
基本セットアップ
編集<?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 ]);
基本構文
編集変数の出力
編集{# 基本的な変数の出力 #} {{ name }} {{ user.name }} {{ user['name'] }} {# HTMLエスケープ #} {{ data|escape }} {{ data|e }}
制御構文
編集条件分岐
編集{% if user.isLoggedIn %} <h1>ようこそ、{{ user.name }}さん</h1> {% else %} <h1>ログインしてください</h1> {% endif %}
ループ
編集{% for item in items %} <div class="item"> <h2>{{ item.title }}</h2> <p>{{ item.description }}</p> </div> {% else %} <p>アイテムが見つかりません</p> {% endfor %}
テンプレート継承
編集親テンプレート
編集- base.html.twig
<!DOCTYPE html> <html> <head> <title>{% block title %}{% endblock %}</title> {% block stylesheets %}{% endblock %} </head> <body> {% block body %}{% endblock %} {% block javascripts %}{% endblock %} </body> </html>
子テンプレート
編集- page.html.twig
{% extends 'base.html.twig' %} {% block title %}ページタイトル{% endblock %} {% block body %} <h1>コンテンツ</h1> {% endblock %}
フィルタ
編集組み込みフィルタ
編集- date
- escape/e
- upper
- lower
- trim
- nl2br
- raw
- length
カスタムフィルタ
編集$filter = new \Twig\TwigFilter('price', function ($number) { return number_format($number, 2) . '円'; }); $twig->addFilter($filter);
関数
編集組み込み関数
編集- range
- date
- dump
- include
- max
- min
- random
カスタム関数
編集$function = new \Twig\TwigFunction('calculateTax', function ($amount) { return $amount * 1.1; }); $twig->addFunction($function);
マクロ
編集マクロの定義と使用
編集{% macro input(name, value, type = "text", size = 20) %} <input type="{{ type }}" name="{{ name }}" value="{{ value|e }}" size="{{ size }}"> {% endmacro %} {% import "forms.html" as forms %} {{ forms.input('username') }}
インクルードとエンベッド
編集インクルード
編集{% include 'header.html' %} {% include 'sidebar.html' with {'items': menu_items} %}
エンベッド
編集{% embed "base_sidebar.html" %} {% block sidebar %} <h3>カスタムサイドバー</h3> {% endblock %} {% endembed %}
エクステンション
編集コアエクステンション
編集- StringLoader
- Debug
- Sandbox
- Optimizer
- Profiler
カスタムエクステンション
編集class CustomExtension extends \Twig\Extension\AbstractExtension { public function getFilters() { return [ new \Twig\TwigFilter('custom', [$this, 'customFilter']), ]; } public function customFilter($value) { // フィルタの処理 } }
セキュリティ
編集サンドボックス機能
編集- タグの制限
- フィルタの制限
- 関数の制限
エスケープ戦略
編集- HTML自動エスケープ
- JavaScriptエスケープ
- CSSエスケープ
パフォーマンス最適化
編集キャッシュ設定
編集- コンパイルキャッシュ
- オートリロード
- 最適化オプション
ベストプラクティス
編集- テンプレートの分割
- キャッシュの活用
- 適切なエスケープ処理
デバッグ
編集デバッグツール
編集- dump()関数
- プロファイラ
- エラーハンドリング
開発環境設定
編集- デバッグモード
- 厳密な変数チェック
- 自動リロード
統合
編集フレームワーク統合
編集- Symfony
- Laravel
- Slim
- CodeIgniter
その他のツール
編集- PHPUnit
- Composer
- IDE支援
APIリファレンス
編集主要なクラス
編集- Environment
- LoaderInterface
- Template
- Extension
コミュニティリソース
編集ドキュメント
編集- 公式ドキュメント
- チュートリアル
- クックブック
サポート
編集- Stack Overflow
- GitHub Issues
- コミュニティフォーラム