# 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 使える
# TRUEとFALSEのエッジケース
| 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)