#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 %}

notandor使える

#TRUEFALSEのエッジケース

ValueBoolean
empty stringfalse
numeric zerofalse
NAN (Not A Number)true
INF (Infinity)true
whitespace-only stringtrue
string "0" or '0'false
empty arrayfalse
nullfalse
non-empty arraytrue
objecttrue

#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

arrayobject使用可能

variabledescription
loop.index1からスタート index
loop.index00からスタート index
loop.revindexリバース index1まで
loop.revindex0リバース index0まで
loop.firstループ最初
loop.lastループラスト
loop.lengthループ長さ length
loop.parentparent コンテキスト

#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

関連記事

php curl 使って クリックなしで POST 送信
allowurlinclude の設定で ftp_connect()エラー
Lumen と Laravel 違い比較
Laravel5.7 の MVC 使う時のメモ
php 開発におけるルール・規約
PHP 7.4 にアップグレードして使えなくなる機能
解決!phpMyAdmin テーブル構造の内容が表示されない問題
正規表現一覧 よく使う検索・置換のパターン
開発時によく使うゼロ埋めパディング作業まとめ
知ってるようで知らなかった composer のコマンドとオプションの世界
Laravel 5.1 から 8.1 にバージョンアップ
laravel vuejs 初期設定
HTML から PDF に変換 PHP ライブラリ mPDF の設定
nuxtjs と codeigniter で jwt システム構築
爆速・軽量フレームワーク codeigniter PHP 開発
Laravel Error についてのメモ