強まっていこう

あっちゃこっちゃへ強まっていくためのブログです。

Twig の使い方 - シンプルなチートシート的メモ 3 - 便利なフィルター

wolfbash.hateblo.jp

前回の続き。

便利なフィルター愉快なフィルター。

絶対値

{% set number = -30 %}
{# 30 #}
{{ number|abs }}

リスト分割

{# ROW: 123 ROW: 345 ROW: 7xx #}
{% for row in [ 1, 2, 3, 4, 5, 6, 7 ]|batch(3, 'x') %}
  ROW: {% for d in row %}{{ d }}{% endfor %}
{% endfor %}

大文字小文字化、先頭1文字大文字化

{# Lcfirst #}
{{ 'lcfirst'|capitalize }}
{# lower #}
{{ 'LOWER'|lower }}
{# UPPER #}
{{ 'upper'|upper }}

日時フォーマットと日時の加減算

フォーマッタは DateInterval::format と同じ。

http://php.net/manual/ja/dateinterval.format.phpphp.net

{# 2018 - 01 - 02 12 : 34 : 56 #}
{{ '2018-01-02 12:34:56'|date("Y - m - d h : i : s") }}
{# 2017-12-26 12:34:56 #}
{{ '2018-01-02 12:34:56'|date_modify("-1 week")|date("Y-m-d h:i:s") }}

default

{# default string #}
{{ str|default('default string') }}

escape

{# %3Fhoge%3Dfuga #}
{{ '?hoge=fuga'|e('url') }}
{# %3Fhoge%3Dfuga #}
{{ '?hoge=fuga'|url_encode }}
{# hoge=HOGE&fuga=FUGA #}
{{ { hoge: 'HOGE', fuga: 'FUGA' }|url_encode }}

url_encode はクエリストリングも作れる便利な子。この考え方って素敵やん。

配列の一番最初を取得

連想配列もね。そこは PHP だから。

{# 1 #}
{{ [ 1, 2, 3 ]|first }}
{# HOGE #}
{{ { hoge: 'HOGE', fuga: 'FUGA', foo: 'FOO' }|first }}
{# a #}
{{ 'abc'|first }}

配列の一番ケツを取得

first のケツ版。

{# 3 #}
{{ [ 1, 2, 3 ]|last }}
{# FOO #}
{{ { hoge: 'HOGE', fuga: 'FUGA', foo: 'FOO' }|last }}
{# c #}
{{ 'abc'|last }}

sprintf

{# hoge 1 1.000000 #}
{{ "%s %d %f"|format("hoge", 1.1, 1) }}

join

{# 1,2,3 #}
{{ [ 1, 2, 3 ]|join(',') }}

split

PHP ではいなくなった子。消すなバカ。何が explode じゃボケカスオカチメンコ。

{# [ 1, 2, 3 #}
{{ '1,2,3'|split(',') }}

json_encode

{# {"hoge":"HOGE","fuga":"FUGA"} #}
{{ { hoge:'HOGE', fuga:'FUGA' }|json_encode()|raw }}

length

{# 3 #}
{{ [ 1, 2, 3 ]|length }}

merge

{# 1, 2, 3, 4 #}
{{ dump([ 1, 2 ]|merge([ 3, 4 ])) }}
{# { hoge: 'HOGE', fuga: 'FUGA', foo: 'FOO' #}
{{ dump({ hoge: 'HOGE', fuga: 'XXX' }|merge({ fuga: 'FUGA', foo: 'FOO' })) }}

改行を br に

{#
  one<br>
  two
#}
{{ "one\ntwo"|nl2br }}

数字をコンマで区切ったり、小数点切り詰めたり

PHP の number_format を呼んでるだけ。

{# 1,000,000 #}
{{ 1000000.234|number_format }}
{# 1,000,000.23 #}
{{ 1000000.234|number_format(2, '.') }}

置換

{# HOGE FUGA #}
{{ 'hoge fuga'|replace({ 'hoge': 'HOGE', 'fuga': 'FUGA' }) }}

リバース

{# 4321 #}
{{ '1234'|reverse }}

数値丸め

{# 10 #}
{{ 10.4 | round }}
{# 11 #}
{{ 10.5 | round }}
{# 11 #}
{{ 10.4 | round(0, 'ceil') }}
{# 10 #}
{{ 10.5 | round(0, 'floor') }}
{# 10.1 #}
{{ 10.05 | round(1) }}

slice

{# bcde #}
{{ 'abcdef'|slice(1, -1) }}
{# bcde #}
{{ 'abcdef'[1:-1] }}

sort

{# 1, 2, 3 ,4 #}
{{ [ 3, 4, 1, 2 ]|sort }}

striptags

PHP まんま。

{# hogeblah #}
{{ '<p>hoge</p><br><span>blah</span>'|striptags }}
{# hoge&lt;br&gt;blah #}
{{ '<p>hoge</p><br><span>blah</span>'|striptags('<br>') }}

trim

PHP まんま。

{# blah blah blah #}
{{ '  blah blah blah  '|trim }}

ブロックライクにフィルター

{% filter upper %}
This text becomes uppercase
{% endfilter %}
{% filter lower|escape %}
  <strong>SOME TEXT</strong>
{% endfilter %}