急遽twigを使用したサイトの修正を依頼され、twigについて調べた自分的メモです。
twig とは
PHP製のテンプレートエンジン。
インストール
composer require rcrowe/twigbridge
テンプレート
プロジェクトを作成するなら、テンプレート作ることになると思います。
土台となるテンプレートを読み込むには extends パーツを読み込むには include を設定します。
引数を渡すこともできます
// 土台となるテンプレート
{% extends 'ファイルパス' %}
// 一部のテンプレート
{% include 'ファイルパス'%}
// 引数をセットする
{% include 'pager.html.twig' with pager %}
{% include 'ファイルパス' with { 'favorite' : 'apple' } %}
if 条件文
{% if(row.id == "abc") %}
<!-- 条件1がtrueの処理 -->
{% elseif(row.id == "efg") %}
<!-- 条件2がtrueの処理 -->
{% else %}
<!-- その他の処理 -->
{% endif %}
for文
foreachは "for in"で代用
{% for i = 1...100 %}
<!-- 処理 -->
{% endfor %}
// 配列
{% for val in rows_work %}
<!-- 処理 -->
{% endfor %}
// 連想配列
{% for key, rows in rows_work %}
<!-- 処理 -->
{% endfor %}
三項演算子
{{ 条件文 ? 処理A : 処理B }}
変数
// セット
{% set sample_data = 'apple' %}
// 配列
{% set sample_array = ['apple', 'orange'] %}
{% set sample_array = ['favorite': 'bappler'] %}
// 使う
{{ sample_data }}
{{ sample_data[1] }}
{{ sample_array.favorite }}
twigフィルター
複数のフィルターをチェインできる {{ w.description | raw | nl2br }}
文字列編
// 文字切り詰め
{{ name | length > 32 ? name | slice(0, 14) ~ '…' : name }}
// slice
{# bcde #}
{{ 'abcdef'|slice(1, -1) }}
{# bcde #}
{{ 'abcdef'[1:-1] }}
// default
{{ var|default('var is not defined') }}
// 大文字小文字化
{{ 'LOWER'|lower }}
{{ 'upper'|upper }}
// 先頭1文字大文字化
{{ 'lcfirst'|capitalize }}
// escape
{{ '?hoge=fuga'|e('url') }}
{{ '?hoge=fuga'|url_encode }}
{{ { hoge: 'HOGE', fuga: 'FUGA' }|url_encode }}
// sprintf
{{ "%s %d %f"|format("hoge", 1.1, 1) }}
// nl2br
{{ "one\ntwo"|nl2br }}
// replace
{{ 'hoge fuga'|replace({ 'hoge': 'HOGE', 'fuga': 'FUGA' }) }}
// リバース
{{ '1234'|reverse }}
配列編
// 後ろ
{{ [ 1, 2, 3 ]|last }}
{{ { hoge: 'HOGE', fuga: 'FUGA', foo: 'FOO' }|last }}
{{ 'abc'|last }}
// join
{{ [ 1, 2, 3 ]|join(',') }}
// explode
{{ '1,2,3'|split(',') }}
// json encode
{{ { hoge:'HOGE', fuga:'FUGA' }|json_encode()|raw }}
// length
{{ [ 1, 2, 3 ]|length }}
// merge
{{ dump([ 1, 2 ]|merge([ 3, 4 ])) }}
数値編
// ナンバー
{{ 200.35 | number_format }}
{{ 1000000.234567|number_format(2, '.') }}
// 丸め
{{ 10.4 | round }} {# 10 #}
{{ 10.5 | round }} {# 11 #}
{{ 10.4 | round(0, 'ceil') }}{# 11 #}
{{ 10.5 | round(0, 'floor') }}{# 10 #}
{{ 10.05 | round(1) }} {# 10.1 #}
// 絶対値
{% set number = -30 %}
{# 30 #}
{{ number|abs }}
日付編
{{ '2018-01-02 12:34:56'|date("Y/m/d h:i:s") }}
{{ '2018-01-02 12:34:56'|date_modify("-1 week")|date("Y-m-d h:i:s") }}
コメント
{# コメント #}
CSRF対策
{{ csrf_field() }}
定数アクセス
{{ constant('App\\Demo\\Test::DEMO') }}
独自関数を作る
lib/clsses/Renderer.php
使用例
sample/twig
{% extends 'layout/user_default'%}
{% block content %}
{% set title='hello' %}
<div class="sample">
<h1>{{ title }}</h1>
</div>
{% endblock %}
その他サンプル
変数がセットされているかどうか確認して
{% set all_option = all_option is defined ? all_option : true %}