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


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

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を使えるようになりました。