Help us understand the problem. What is going on with this article?

FuelPHPとプレゼンタとSmarty

More than 1 year has passed since last update.

基本的なMVCだけでコードを書いていると、viewが増えるごとに次第にモデルやコントローラのコード量が増えてくる。DBのデータをそのままviewに渡すだけで済むなら簡単だけど、業務システム開発の現場はそんな単純なことで済まないことが多い。

プレゼンタを使うと、必要な処理を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バッケージがプレゼンタに対応していないことがそもそもの問題なので、いずれプルリクを書いたりとかしたい。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away