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
- コミュニティフォーラム