twigテンプレートを利用する

dietcake advent calendar 2014 の5日目です。
3日目に紹介した spongecake で作ったひな形ですが、デフォルトでは素のPHPでviewが書かれています。
dietcake は、テンプレートエンジンの切り替えも簡単にできるようになっています。
最近フレームワークを問わずよく使われるtwigの使い方を紹介します。

テンプレートエンジンを変更する場合はviewクラスを用意して、controllerでそのviewクラスを指定すればOKです。twigの場合は、以下のようなファイル(app/app_twig_view.php)を用意します。

https://github.com/ha1t/devtool/blob/master/app/app_twig_view.php

<?php
require_once VENDOR_DIR . 'twig/twig/lib/Twig/Autoloader.php';
define('TWIG_EXT', '.tpl');

class AppTwigView
{
    public $controller;
    public $vars = array();
    public $twig;

    public function __construct($controller)
    {
        $this->controller = $controller;

        Twig_Autoloader::register();
        $loader = new Twig_Loader_Filesystem(VIEWS_DIR);
        $this->twig = new Twig_Environment($loader, array('cache' => TWIG_CACHE_DIR, 'auto_reload' => true));
        $this->twig->addFunction('url', new Twig_Function_Function('url'));
    }

    public function render($action = null)
    {
        $action = is_null($action) ? $this->controller->action : $action;
        if (strpos($action, '/') === false) {
            $tpl_file = $this->controller->name . '/' . $action . TWIG_EXT;
        } else {
            $tpl_file = $action . TWIG_EXT;
        }

        $tpl = $this->twig->loadTemplate($tpl_file);

        ob_start();
        $tpl->display($this->vars);
        $out = ob_get_clean();

        $this->controller->output = $out;
    }
}

そうしたら、app/app_controller.php の $default_view_class メンバに、Viewクラスの名前を記述すればOKです。( https://github.com/ha1t/devtool/blob/master/app/app_controller.php#L5 )

このやり方に習う事で Smarty を始めとした一般的なテンプレートエンジンについてはほぼ対応可能になります。
アプリケーションを開発する一番最初に、どのテンプレートエンジンを使うか決めて、それに相応しいviewクラスを選択すると良いでしょう。
複数のテンプレートエンジンを同時に使ったりもできますが、原則案件開始時に決めて変更しない事がカオスにならない秘訣です。

投稿者: halt

PHPプログラマ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ねこ認証:9つのパネルの中からねこを3匹選んでください