概要

編集

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