PHPでSmartyの代わりにTwigを使ってみた
初めまして、スパイスワークスのエンジニアとして2016年10月に入社していました、髙橋です。
初めてこちらのブログを書くので、最初に自己紹介から入りますね。
◇自己紹介
【名前】髙橋
【好きなもの】ゲーム全般(特にスプラトゥーン)
【趣味】アニメ、洋画、海外ドラマを見るのがめちゃくちゃ好きです。
【スキル】PHPチョットカケル、htmlチョットワカル、CSSチョットワカル、普通免許(MT)、英検準二級
スプラトゥーンは好きすぎてプレイ時間が〇〇〇〇時間を超えてました。
2が楽しみです。Switchも買いました。
◇経緯
弊社では基本的にプログラミング言語にPHPを使っています。
Rubyを勉強中という状態で入社したので、最初はセミコロンが邪魔で仕方ありませんでしたが、
今ではセミコロン君がいないと落ち着かなくなってしまいました…。
最近はRubyなどのモダンな言語を使っている会社さんがかなり多く見受けられ、PHPは負の遺産扱いされることが多いです。
しかし、Laravel、cakePHPなどで有名なサービスを作られている会社さんも多いですし、PHP7系は昔とは比べ物にならないくらい便利になっているようです。
弊社でも少し大きめの案件になってきたらLaravelを取り入れられたらいいなぁと勝手に思っています。
あと、PHPのマスコットであるelePHPantちゃんも意外とかわいいです。
そして今回、フレームワークで組むほどの規模感では無いけど生のPHPを書くのはめんどくさいなぁという場面で、PHPのテンプレートエンジンであるTwigを使ったので紹介します。
Twig | The flexible, fast, and secure
template engine for PHP
https://twig.sensiolabs.org/
本当はBladeを使いたかったのですが、Laravelに依存していて、且つLaravelで組む規模でも無かったため単体で導入が可能なTwigを使用しました。
◇導入方法
■composerの導入
Twigはcomposerを通して簡単に導入できます。
プロジェクト単位での導入が可能のため、Twigとcomposerを利用するプロジェクトのフォルダだけにぶち込むことができます。
僕の環境ではXAMPPを利用しているので、
C:\xampp\htdocs\twigSample
というプロジェクトを作成します。
そのプロジェクト内に移動して
$curl -s http://getcomposer.org/installer | php
を実行すると、
All settings correct for using Composer Downloading... Composer (version 1.4.1) successfully installed to: C:\xampp\htdocs\twigSample\composer.phar Use it: php composer.phar
と、composer.pharが作成されます。これでcomposerは導入完了です。
■Twigの導入
Twigの2.x系はPHP7.0.0以上を必要とします。
僕の会社PC環境ではWindowsでPHP5.6.24を使用しているため、1.x系を導入します。
PHP7.0.0以上を使っている方は2.x系で問題ないですし、Macを使っている方はHomebrewでphpenvを導入してあげれば簡単にPHPのバージョンを切り替えることもできます。
次のコマンドを実行します。
$composer require twig/twig:~1.0
これを実行すると
php "C:\xampp\php\composer.phar" require twig/twig:~1.0 ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing twig/twig (v1.33.2) Downloading: 100% Writing lock file Generating autoload files
色々ファイルが作成されますが、
twigSample
— vendor
—- composer
—- twig
— autoload.php
— composer.json
— composer.lock
— composer.phar
のようになっていれば導入完了です。凄く簡単です。
TwigはSymfonyで利用できるテンプレートエンジンでもありますが、今回のように単体でも導入することが出来ます。
◇使い方
■サンプル
実際にサンプルコードを以下に記載します。
index.php
<?php require_once 'vendor/autoload.php'; $loader = new Twig_Loader_Filesystem('./view'); $twig = new Twig_Environment($loader); echo $twig->render('hello.html', array('name' => 'Twig'));
Twig_Loader_Filesystemでviewの保存先を指定しています。
実際にレンダリングしているのは$twig->render()の部分です。nameという変数で’Twig’が出力されます。
view/hello.html
<h1>Hello, {{name}}</h1>
実際の出力画面
これでとりあえず簡単に出力することが出来ます。html側で変数を出力してあげるときは{{}}で囲ってあげることになります。
■基本的な使い方
まず、Twigの構文には二種類あります。
出力をする:{{ }}
ロジック処理をする:{% %}
生のPHPだと<?php ?>という書き方になるので、この時点で少し簡略化されてます。
そのほか、基本的な構文を以下に記載します。
{{name}} <!--nameを出力--> {{arr.name}} <!--配列へのアクセス--> {{arr.name}} <!--オブジェクトへのアクセス--> {% if name == 'takahashi' %} <!--if文--> trueの時の処理 {% else %} falseの時の処理 {% endif %} {% for users in user %} <!-- for文 --> {{ user.name }} {% endfor %} {{ 1 + 2 - 3 }} <!-- 四則演算 --> {{ a and b or c }} <!-- 論理演算 --> {% if not flag %} <!-- 否定演算子 --> 出力 {% endif %} {# コメント文 #} <!-- コメントアウト --> {{ flag ? 'true' : 'false' }} <!-- 三項演算子 --> {{ '{{' }} name }} <!-- エスケープ -->
この他にもフィルター機能があり、変数名|フィルター名で様々なフィルターを利用できたりします。
■詳細な使い方
https://twig.sensiolabs.org/doc/2.x/templates.html
公式のドキュメントです。
Twigはテンプレートの継承が強みとされていて、その内容についても記載されています。
◇まとめ
という感じで入社してからはPHPを触っています。
次にブログ記事を書くときはLaravelについて書けたらいいなぁと思っています。
おしまい!