[CodeIgniter]Twigと連携してみた – その1


PHPの軽量フレームワークである日本CodeIgniterユーザ会とDJangoやTilesのように継承機能を用いたPHPテンプレートエンジン「Twig – The flexible, fast, and secure template language for PHP」を簡単に連携させてみましたので設定を書きたいと思います。

ただ、CodeIgniterで作成したHelperなどをTwig内での使用までは検証できなかったのでまた時間がある時にでもやってみたいと思います。

下記で説明しているファイルはこちらのファイルに含まれています。
説明用にソースを一部編集していますので、異なる部分もあるのでご了承ください。

ci-twig-1.0.0.zip

※下記のソースはjamiepittock’s codeigniter-twig at master – GitHubを拝借して一部編集しています。

全体の構成

.
`-- system
    |-- application
    |   |-- config
    |   |   `-- twig.php // Twig用設定ファイル
    |   |-- controllers
    |   |-- errors
    |   |-- helpers
    |   |-- hooks
    |   |-- language
    |   |-- libraries
    |   |   |-- Twig // Twigライブラリ
    |   |   `-- Twig.php // Twigクラス
    |   |-- models
    |   `-- views
    |-- cache
    |   `-- twig // Twig用キャッシュディレクトリ
    |-- codeigniter
    |-- database
    |   `-- drivers
    |-- fonts
    |-- helpers
    |-- language
    |   `-- english
    |-- libraries
    |-- logs
    |-- plugins
    `-- scaffolding
        |-- images
        `-- views

追加ファイル

application/libraries/Twig

https://www.twig-project.org/installationからダウンロードしたTwigのlibディレクトリ以下を格納する。

application/config/twig.php

< ?php if (!defined('BASEPATH')) exit('No direct script access allowed');
$config['template_dir'] = APPPATH.'views';
$config['cache_dir'] = BASEPATH.'cache/twig';
?>

application/libraries/Twig.php

< ?php if (!defined('BASEPATH')) {exit('No direct script access allowed');}
 
class Twig
{
	private $CI;
	private $_twig;
	private $_template_dir;
	private $cache_dir;
 
	/**
	 * Constructor
	 *
	 */
	function __construct()
	{
		$this->CI =& get_instance();
		$this->CI->config->load('twig');
 
		ini_set('include_path',
		ini_get('include_path') . PATH_SEPARATOR . APPPATH . 'libraries/Twig');
 
		require_once (string) "Autoloader" . EXT;
		log_message('debug', "Twig Autoloader Loaded");
 
		Twig_Autoloader::register();
 
		$this->_template_dir = $this->CI->config->item('template_dir');
		$this->_cache_dir = $this->CI->config->item('cache_dir');
 
		$loader = new Twig_Loader_Filesystem($this->_template_dir);
		$this->_twig = new Twig_Environment($loader, array(
			'debug' => true,
			'cache' => $this->_cache_dir,
		));
	}
 
	public function view($template, $data = array()) {
		$template = $this->_twig->loadTemplate($template);
 
		echo $template->render($data);
	}
}
?>

サンプル

application/controllers/

< ?php
 
class Welcome extends Controller {
	function Welcome()
	{
		parent::Controller();
		$this->load-library('twig');
	}
 
	function index()
	{
		$data['name'] = 'Tatsuya';
		$this->twig->view('welcome_message.php', $data);
	}
}
 
/* End of file welcome.php */
/* Location: ./system/application/controllers/welcome.php */
?>

関連記事