Posted at

CodeIgniter 3とtwigを連携させ継承して使う

More than 3 years have passed since last update.

ぐぐっても情報が少なかったので書いておきます。


CodeIgniterにtwigテンプレートエンジン連携


環境

・Composer

・PHP7.0.2

・CodeIgniter3.0.6

・twig1.24.0


連携手順

applicationディレクトリ内にcomposer.jsonをまずは作成します。

vi cd application/composer.json

内容は


composer.json

{

"require": {
"twig/twig" : "1.*"
}
}

そしたら、Twigのインストールで

cd application

composer install

これでapplication/vendorディレクトリが作成されその中にautoload.phpとtwig本体が入るかと思います。

vendor/autoload.phpを読み込ませるためにapplication/config/を変更します。

vi application/config/config.php

でコメントアウトされてない方の

変更前

$config['composer_autoload'] = FALSE;

変更後
$config['composer_autoload'] = TRUE;

に変更します。これでtwigが連携されました。

CodeIgniter 3でTwigテンプレートエンジンを使用する

こちらの記事のようにこのままcontrollerに毎回twigの宣言を書いても使えるのですが、毎回書くのも面倒ですよね?そこで本体CI_Controllerのコンストラクタにして毎回読み込まれるようにします。


CI_Controllerの継承先MY_Controller作成

CI_Controllerを弄るのはあまり良くないので継承先で記述を追加していきます。

CI_Controllerを継承する時はMY_Controllerという名前にしないと使用できないようです。

まずはapplication/coreにMY_Controller.phpを作成します。

vi application/core/MY_Controller.php

内容を


MY_Controller.php

<?php

class MY_Controller extends CI_Controller {
protected $twig;

public function __construct()
{
parent::__construct();
//テンプレートを配置しているフォルダを指定
//今回はapplication/views
$loader = new Twig_Loader_Filesystem('application/views');
//オプションを指定して、twigインスタンス生成
$this->twig = new Twig_Environment($loader, array('cache' => APPPATH.'/cache/twig', 'debug' => true));
}
}



コントローラ作成

先ほどの継承先を使います。

コントローラを作ってみましょう。

コントローラ作成します。

vi application/controllers/Sample.php

内容を


Sample.php

<?php

class Sample extends MY_Controller {
public function index() {
//テンプレート読み込み先指定
$template = $this->twig->loadTemplate('Sample.html');

$view_data = array('test_value' => '日本語でこんにちは');
$this->output->set_output($template->render($view_data));
}
}


テンプレート先も作成します。

vi application/controllers/Sample.html

内容は


Sample.html

<p>{{ test_value }}</p>


これでいい感じにtwigを使えるようになりました。