プレゼンタを使うと、必要な処理をviewごとにコンパクトにまとめることができる。共用の処理と分離することができるので、デバッグもしやすくなる。
Smartyで書かれたviewをプレゼンタと紐付ける
パーサとしてSmartyを採用しているケースで、ちょっと納得がいかない部分があった。
View_Smarty::forge('default/index');
たとえば上記のようなコードをプレゼンタに置き換えるなら、
Presenter::forge('default/index');
普通はこう書き変えるだけ。プレゼンタはdefault/index.php
、viewもdefault/index.php
となる。
でもSmartyを使う場合は、
Presenter::forge('default/index.php','view',null,'default/index.smarty');
こう書く。Smartyなどのパーサを使う場合はプレゼンタとviewファイルの拡張子が違うため、引数ひとつですませることができない。
引数ひとつですませる方法
Viewを継承した形で使えるView_Smarty
があるように、Presenterを継承したPresenter_Smarty
を作ると拡張子の違いを吸収できる。
class Presenter_Smarty extends Presenter {
public static function forge($presenter, $method = 'view', $auto_filter = null, $view = null)
{
return parent::forge(
$presenter,
$method,
$auto_filter,
\View_Smarty::forge($view.'.smarty'));
}
}
coreのPresenterを参考にして上記のようにPresenter_Smartyを作り、
\Autoloader::add_classes(array(
'Presenter_Smarty' => APPPATH.'xxx/presenter/smarty.php',
));
bootstrap.phpのadd_classesでフックする。これで完了。
Presenter_Smarty::forge('default/index');
こう書ける。
そもそも
公式のparserバッケージがプレゼンタに対応していないことがそもそもの問題なので、いずれプルリクを書いたりとかしたい。