Twigとは?
Twigについての情報って少ないですよね。書籍もほとんどなし。下のほうで紹介している、Twigの本を参考にするのも良いでしょう。
Twigとは何でしょう?僕はTwigとは、何かしらの言語かと思っていました。
が、しかし、これは勘違いのようです。
正確には、PHP製のテンプレートエンジンです。
テンプレートエンジンとは?ちょっと難しくなるのですが、簡単に考えますと、データとテンプレートを合体させて、文字列を作る仕組みのことです。
PHPで考えると、データというのはオブジェクトや配列を指し、テンプレートエンジン自体はPHPのライブラリと考えて問題ありません。
どのように使う?
本来は、Laravelなどのプラットフォームからインストールして使用する方法が普通のようですが、EC-CUBEでは元からTwigを使用する仕組みが備わっています。
EC-CUBEでTwigを使うとなる場合は、特に何も考えなくて良いです。
Twigの基本構文
以前も触れましたが、Twigの基本構文はだいたい3つのパターンです。
- 表示させる ・・・ {{ 値 }}
- 処理をする ・・・ {% 処理 %}
- コメントを入れる ・・・ {# テキスト #}
これだけですので、特に混乱することはありませんよね?
様々な使用法
コメント文
{# ここにコメント文を記述します #}
変数
{{ 変数名 }}
※ただし条件式の中では{{}}は不要で、例えば「{% if message="hello" %}」のようになります。
条件式
if文
{% if 条件式 %} {% endif %}
更には次のような使い方も可能です。
{% if 条件式A and 条件式B %} {% elseif 条件式 %} {% else %} {% endif %}
for文
{% for i = 1 1..100 %} {% endfor %}
foreach文(for in で代用)
{% for key in value %} {% endfor %}
keyは任意の名前、valueも任意の配列を指します。
三項演算子
{{ 条件式 ? 処理A : 処理B }}
条件式が正を満たすときに処理Aを行い、誤のときに処理Bを行います。
継承
{% extends 'ファイルパス' %}
- 別ファイルから継承します。但し、複数はNGです。
- 親ブロックを子ブロックが上書きする場合です。
- {% block ブロック名 %}~{% endblock %}
挿入
{% include 'ファイルパス' %} {% include 'aaa/bbb' with { 'aaa' : 'bbb' } %} // 引数も取れます
CSRF対策
{{ csrf_field() }}
HTML文のエスケープ
{{ html文 | e("<a>test</a>") }}
同じTwig内で設定する方法
{% set 変数名 = 'value' %} {% set array = [ A , B ] %} // 配列の場合 {% set array = [ key : value ] %} // 連想配列の場合
Controllerなどから渡す場合
変数:{{ 変数名 }} 配列:{{ 変数名.キー名 }} ※連想配列も可
以下、例を示します。
$url = 'https://shirakawaroom.com'; $post = $this->post_model->getPostArray(); // 'id' => '1', 'title' => 'タイトル' return view('post/show', [ 'url' => $url, // 変数 'post' => $post // 配列 ];
Twigファイル
<p>変数は「{{ url }}」です。</p> <p>配列は、idが{{ post.id }}で、titleが{{ post.title }}です。</p>
出力結果
変数は「https://shirakawaroom.com」です。 配列は、idが1で、titleがタイトルです。
となります。
その他
{{ 変数 | length }} // 文字数 {{ dump() }} // PHPのdumpと同じ
バリデーションエラーなど、定型変数のときの書き方
input_old('タグの名前') // セッションなどで確認フォームを利用するとき errors.first('タグの名前') // バリデーションエラー時
例文
テンプレート・変数を使用したページ
{% extends 'layout/user_default' %} {% block content %} {% set title='hello' %} <div class="sample"> <h1>{{ title }}</h1> </div> {% endblock %}
E-mailのフォーム(一部抜粋したもの)
<div class="form-group"> <label for="f-email">E-mail Address</label> <input type="email" name="email" class="form-control" id="f-mail" ...(略)... value="{{ input_old('email') }}" placeholder="entry@example.com"> {% if errors.first('email') | length > 0 %} <span class="text-danger">{{ errors.first('email') }}</span> {% endif %} </div>
まとめ
以上、Twigにはさまざまな使い方があることがわかりましたね。
ここで使われている方法や、あとは自身でいろいろと調べて、Twigについて研鑽を深めていきましょう。
下で売ってる本、おすすめですよ。
ここまで読んでいただき、有り難うございました。
応援していただけると励みになります。
コメント