8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPテンプレートエンジンTwigのTips

Last updated at Posted at 2018-07-17

最近Twigを使うようになったので今後のための備忘録として書きます。

公式ドキュメント

インスタンス生成

require_once '/path/to/vendor/autoload.php';

$loader = new Twig_Loader_Filesystem('/path/to/templates');
$loader->addPath('/path/to/additional_templates');
$twig = new Twig_Environment($loader, [
    'cache'            => '/path/to/cache_dir',
    'auto_reload'      => TRUE,
    'strict_variables' => TRUE,
]);

テンプレートの読込

共有テンプレートなどはaddPathなどで一気に読み込むと良い。

キャッシュ

cacheに書いたパスにコンパイルしたPHPキャッシュファイルを置く。auto_reloadオプションはPHPファイルに変更があったらキャッシュファイルを置き換えてくれるので開発環境ではTRUE、本番環境ではFALSEにする。また、キャッシュがある限りそれを読み続けるので、本番環境にデプロイするときは一度全てキャッシュを消した方が良い。

変数名やメソッド名の厳密性

strict_variablesはデフォルトでFALSEだが、もしここで存在しない変数名やメソッド名を呼ぶとエラーが出ずにスルーされる。それはとても困るのでTRUEにする。

文法

デバッグ

var_dump的に

{{ dump(var) }}

print_r的に

{{- var|json_encode(constant('JSON_PRETTY_PRINT') b-or constant('JSON_UNESCAPED_UNICODE')) -}}

テンプレート内に読み込まれた全変数のキー

{% for k, v in _context  %}
  {{ k }}
{% endfor %}

include

{{ include('hoge.twig'[, with_context = false]) }}

include先に変数がそのまま引き渡される。引き渡したくなかったらwith_context = false

block

{% block BlockName %}{{ var }}{% endblock %}
{% block BlockName var %}

これらは等価。

比較

厳密な比較===は使えない。同じことはsame as()構文で実現できる。

{{ 0 is same as("0") ? "0 === '0'" : "0 !== '0'" }} // 0 !== '0'

ゆるい比較==は可能。ただしPHP本家よりもゆるいので留意する。

{{ "aa" == null ? "'aa' == null" : "'aa' != null" }}
{# 'aa' != null #}

{{    0 == null ? "0 == null" : "0 != null" }}
{# 0 == null #}

{{   "" == null ? "'' == null" : "'' != null" }}
{# '' == null #}

{{   [] == null ? "[] == null" : "[] != null" }}
{# [] == null #}

{{ hoge == null ? "undefined == null" : "undefined != null" }}
{# undefined == null #}

1-4はわかる。5つめが怖い。

foreach

{% for k, v in array %}
    {{ k }}:{{ v }}
{% endfor %}

三項演算子

{{ foo ? 'yes' : 'no' }}

{# これらは等価 #}
{{ foo ?: 'no' }}
{{ foo ? foo : 'no' }}

{# これらは等価 #}
{{ foo ? 'yes' }}
{{ foo ? 'yes' : '' }}
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?