2
0

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 3 years have passed since last update.

Twig 自分的メモ

Last updated at Posted at 2021-03-19

急遽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 %}
2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?