FuelPHPのViewの拡張子を変えるまでにしたこと

FuelPHP標準のViewクラスを利用する際、テンプレートの拡張子が「php」になっているんだけど、
これを別の拡張子に変えたかったので調べてみた。

一応viewクラスは直接触らずに(coreファイルは弄りたくない)対応する事を前提にしています。

1. 既存のViewクラスをapp/vendor内に作成したviewディレクトリ配下にコピーする

拡張子を変える以外は既存のViewクラスの機能をそのまま利用したかったので、とりあえずまるっとvendorにコピー
core/classes/view.phpをapp/vendor/view/view.phpへ

2. app/config/config.phpに変更したいテンプレート拡張子を追加し、parserパッケージをオートロードするようにする

view周りのことはparserパッケージを使えばできるよって諸処で記載されていたので、今回はこれを利用してみる。
always_loadで対象のパッケージを入れて、それと一緒に変更したい拡張子(今回は「.tpl.html」とする)も合わせて記述。

実際の記述はこんな感じ

// app/config/config.php
return array (
  /**
   * テンプレート拡張子
   */
  'template_extension' => 'tpl.html' ,
  /**
   * 自動ロードライブラリ
   */
  'always_load' => array (
    'packages' => array (
      'parser',
    )
  )
);

3. app/config/parser.phpを作成し、拡張子とViewを関連付ける

packages/parser/config/parasr.phpを参考に、同じファイルをapp/config以下に設置し2.で設定したtemplate_extensionの値を設定

// app/config/parser.php
return array(
  'extensions' => array (
    Config:: get('template_extension') => 'View',
  ),
);

4. app/vendor/view/view.phpをちょっと弄る

1.でコピーしたviewクラスのコンストラクタに、テンプレート拡張子の設定を反映する記述を追加

// app/vendor/view/view.php
public function __construct($file = null, $data = null, $filter = null)
{
  if (Config::get( 'template_extension'))
  {
    $this-> extension = Config:: get('template_extension');
  }
.
.
.

5. 独自のViewをapp/bootstrap.php内で宣言

// app/bootstrap.php
Autoloader::add_classes (array (
        'View' => APPPATH. 'vendor/view/view.php',
));

6. 通常通りにviewを使う

\View::forge('index');

この時のviewテンプレートの拡張子は、template_extensionで設定したもの