# twig 3 人気 PHP テンプレートエンジンがバージョンアップ

シンフォニーチームが作ったテンプレートエンジン twig は最高!と思います
vuejs に切り替える前にずっとお世話になっていました。最近になって昔の twig 記事を整理したら 2019 年 11 月 15 日に 3.0.0 がリリースされました。
🎉 おめでとうございま~す! 🎉 🎉

Twig の強み

  • cache 機能・動きが速い
    一度コンパイルされたテンプレートファイルは、自動キャッシュ化され、次回以降はキャッシュ活用で高速化します。

  • 便利機能が多い
    nl2br、number_format フィルター、ブロック管理、レンダリングなど機能豊富

  • デバッグ機能がある
    デバッグモードがある

  • セキュリティ対策
    自動エスケープ、生 PHP 回避できる

  • フレキシブルに使える
    composer あれば、どこにもインストールできる

  • 学習コストは低い
    取得しやすい、わかりやすいドキュメント、関連記事も多くある

# インストール

composer require でパッケージインストール

composer require "twig/twig:^3.0"

初期設定

// composer 読み込む
require_once '/path/to/vendor/autoload.php';

// Twig 初期化
$loader = new \Twig\Loader\FilesystemLoader('/path/to/templates');
$twig = new \Twig\Environment($loader, [
    'cache' => '/path/to/compilation_cache',
]);

// render 出力
echo $twig->render('index.html', ['name' => 'Fabien']);

// display 出力
$twig->display('/index.twig', ['name' => 'Fabien']);

使えるまで非常に簡単!

基本的な使い方

// for文
{% for user in users %}
    * {{ user.name }}
{% else %}
    No users have been found.
{% endfor %}

// if文
{% if not user.subscribed %}
    <p>You are not subscribed to our mailing list.</p>
{% endif %}

// for if 同時
{% for num in 0..9 if num % 2 == 0 %}
    {{ num }}
{% endfor %}

// extends
{% extends "layout.html" %}

// block
{% block content %}
    Content of the page...
{% endblock %}

# Codeigniter に Twig 入れた時のメモ

MY_Controller.php

<?php
class MY_Controller extends CI_Controller
{
    protected $twig;

    public function __construct()
    {
        parent::__construct();

        // Twig 初期化
        $loader = new \Twig\Loader\FilesystemLoader('../application/views');
        $twig = new \Twig\Environment($loader, [
            // 'cache' => '/path/to/compilation_cache',
        ]);
    }
}

# Tags

# if

{% if product.stock > 10 %}
   Available
{% elseif product.stock > 0 %}
   Only {{ product.stock }} left!
{% else %}
   Sold-out!
{% endif %}

not and or 使える

# TRUEFALSEのエッジケース

Value Boolean
empty string false
numeric zero false
NAN (Not A Number) true
INF (Infinity) true
whitespace-only string true
string "0" or '0' false
empty array false
null false
non-empty array true
object true

# for

{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

{% for letter in 'a'..'z' %}
    * {{ letter }}
{% endfor %}

{% for letter in 'a'|upper..'z'|upper %}
    * {{ letter }}
{% endfor %}

{% for key in users|keys %}
    {{ key }}
{% endfor %}

{% for key, user in users|slice(0, 10) %}
    {{ loop.index }} - {{ key }} - {{ user.username|e }}
{% else %}
    <em>no user found</em>
{% endfor %}

e はフィルター escape

# loop

array object使用可能

variable description
loop.index 1 からスタート index
loop.index0 0 からスタート index
loop.revindex リバース index 1まで
loop.revindex0 リバース index 0まで
loop.first ループ最初
loop.last ループラスト
loop.length ループ長さ length
loop.parent parent コンテキスト

# set

{% set foo = 'bar' %}
{% set foo = [1, 2] %}
{% set foo = {'foo': 'bar'} %}
{% set foo = 'foo' ~ 'bar' %}

{% set foo, bar = 'foo', 'bar' %}
{# is equivalent to #}
{% set foo = 'foo' %}
{% set bar = 'bar' %}

{% set foo %}
    <div id="pagination">
        ...
    </div>
{% endset %}

{% for item in list %}
    {% set foo = item %}
{% endfor %}

{# foo is NOT available #}

# 参考

Twig 公式サイト (opens new window)
github Twig (opens new window)
composer packagist (opens new window)

Twig ライセンス BSD ライセンス (opens new window)

2019-11-21
  • php

関連記事

Laravel toSql パラメータ付きで出力
正規表現一覧 よく使う検索・置換のパターン
Apache 初期設定メモ
codeigniter email ライブラリでメール送信 日本語対応
php 開発におけるコーディングルール・規約
php curl 使って クリックなしで POST 送信
php date 日付の日数・月数差を計算
PHP empty isset is_null の違い
php Exception エラーキャッチでメール送信
FlattenException deprecated
allowurlinclude の設定で ftp_connect()エラー
Lumen と Laravel 違い比較
Lumen8 で API 開発
Lumen8 で JWT ユーザー認証
PHP 8 リリース新機能と変更
解決!phpMyAdmin テーブル構造の内容が表示されない問題
Smarty HTTP URL 取得できるサーバー関数
開発時によく使うゼロ埋めパディング作業まとめ
Laravel 5.7 の MVC 使う時のメモ
nuxtjs と codeigniter で jwt システム構築
HTML から PDF に変換 PHP ライブラリ mPDF の設定
PHP 7.4 にアップグレードして使えなくなる機能
php.ini 初期設定のいろいろ
爆速軽量フレームワーク codeigniter PHP 開発
Composer コマンドとオプション
Laravel Error についてのメモ