俺 Pedia

窓際エンジニア(仮)の日常

SlimフレームワークからTwigを利用する

この記事は「低予算でも闘う企画担当者の為の鎮魂歌 Advent Calendar 2015」の10日目の記事です。
 
今回はSlimフレームワークでTwigを利用する方法を紹介します。

導入

SlimフレームワークでTwigを利用するには「Slim-Views」と「Twig」の2つを導入する必要があります。
SlimフレームワークでTwigを利用する場合、Slimフレームワークのカスタムビューとして「Twig」を指定し利用します。そのカスタムビュークラスとして機能するようにインターフェースとして機能するものが「Slim-Views」です。

github.com

何れもComposerで簡単に導入ができます。

[(username)@www ~/bin]$ composer require slim/views
[(username)@www ~/bin]$ composer require twig/twig

「Twig」を利用する場合のシンプルなコードは次のようなものです。

index.phpの11行目でカスタムビューとして「Twig」の利用を設定しています。
11行目から14行目はビューに対する追加設定として「debug」と「cache」を設定しており、「cache」は文字通りキャッシュの生成先を指定します。 「debug」を「true」にするとテンプレートに設定する変数を「dump」出力(var_dumpのようなもの)する事も可能です。
 
その場合は次のようにします。

index.php側では16行目から19行目に追加しているようにエクステンションの利用について設定します。 またテンプレート側ではdump出力したい変数に対して「dump()」関数経由で出力するように設定する事で変数の内容をdumpする事が可能です。
 
このようにSlimとTwigの連携は非常に簡単です。

Twigの機能

さてTwigには様々な機能がありますが幾つか紹介したいと思います。

include

一般的にTwigの勉強をすると最初に紹介されているのは「extends」つまりはテンプレートの継承ですが、私はまずはincludeを紹介します。
includeは基本的には単純に別なテンプレートを読み込み表示する機能です。
 
例えば次のように利用します。

ベースとなるページは「page.html」というテンプレートで作成し、その中のフッター部分は「footer.html」というテンプレートで別途作成、そしてそれを「page.html」テンプレートからincludeして使用しています。
ちょっとしたページを作成しその一部分を共通化するだけであればincludeの方が直感的で簡単に利用する事が可能です。
 
またincludeでは値を渡す事も可能です。

上記の例ではincludeするテンプレートに制作年である「2015」を「year」変数に対して渡しています。

extends

Twigで最も活用されるのが「extends」です。 いわゆるテンプレートの継承で、簡単に言えば予め雛形となるベースのテンプレートを作成しそこにそれぞれのページで部品となるコンテンツを設定し利用するものです。
 
簡単な例を次に示します。

まず予め雛形となるテンプレート(上記の例では「base.html」)を作成します。
次に実際に表示するページのテンプレートを作成しますが、そのテンプレートの中で雛形となる「base.html」を継承する設定を行います。
 
具体的には2行目の内容が継承を行う設定となります。
 
まず雛形となるテンプレートでは「block」を設定します。この「block」が継承先のページで実際のコンテンツに置き換わる部分となります。
例えば「base.html」の4行目を見ると「{% block title %}」から始まり「{% endblock %}」までの部分が一つの「block」となります。
なお、雛形となるテンプレートで「block」の中に記述されている内容は継承先のコンテンツに置き換わります。
 
実際にこのページを実際に表示すると次のようなHTMLとなります。

なお、このケースでは「itemid」に「1234」が渡されて表示されています。
「include」と「extends」は組み合わせて利用する事も当然可能ですので、ページ構成そのものは「extends」で準備し、うち一部の共通部品のみ「include」するような活用でもよいでしょう。

Twigにはその他にも様々な機能がありますので是非一度公式サイトで確認してみるとよいでしょう。

Twigを単体で利用する

さて今回はSlimフレームワークからの利用を前提に説明しましたが、そもそもTwigは単体での利用も当然可能です。 Twigを単体で利用する場合は次のような形で利用します。

使用したテンプレートは「Example.05-1」及び「Example.05-2」で準備したものをそのまま活用しています。
テンプレートを配置するディレクトリとキャッシュ用ディレクトリを指定しあとは出力する処理を記述するだけで利用可能です。

今回はSlimからTwigを利用する方法と簡単なテンプレートの利用方法について紹介しました。
Twigの機能を紹介するには具体的なケースを示しながらサンプルを準備する必要もあり今回は「include」と「extends」以外は一切説明していませんが、機能を利用するケースがあれば都度説明していきたいと思います。
 
テンプレートの活用は非常にコードの再利用性も高まり非常に作業効率の向上が期待できます。
一度覚えてしまうと直感的にテンプレートとコードの分離も行えるようになりますので積極的に活用する事でプロトタイプの開発にも生きてくると思います。
なお、Twigのようなテンプレートエンジンはページの出力だけでなくメール本文の作成やファイルの生成等実は様々な所で応用が可能です。
そういった活用方法も積極的に利用することで経験値として積み重ねる事ができますので積極的に活用を検討してみると新しい使い方が見つかるかもしれません。
 
さて次回は一度ライブラリの紹介を離れます。その後またライブラリの紹介を続けることを想定しています。