Viewクラス

※まだ、メソッド呼び分けの件が決着してないのに次の問題提起・・・

Maple3ではMojaviとかとちがってActionクラスに対するViewクラスをつくらない。以前書いたけど、社内でつかっているMaple2まではViewクラスをつくっていた。けど、いろいろしていくと必要がないように感じたのでなくした。その結果、Viewフィルターでえぐいことをすることになった。これまた以前id:hawkringさんに指摘されている。Viewフィルターでaction/errorList/tokenを特別扱いしてSmartyに登録してるのだ。逆にこれ以外のクラスはActionを通してでないとSmartyにわたせない。

けど、今考えるとこんなことする必要ないんでないか?みんなDIContainerにはいってるんだから、以下のような形で引っ張ってこれるようにSmartyファンクションをつくっちゃえばいいんじゃないか?(target部分はELやOGNLみたいな感じ)

{container target="errorList.messages"}

「container」というのがとっつきにくいかな・・・(いい名前があればお願いします)

Actionでは引数を直接自らの変数にうけとるんではなくて、DTOとしてうけとる。例えばこんな感じ。

class Foo {
    var $dto;

    function setDto(&$dto) {
        $this->dto =& $dto;
    }
                 :
}

maple.iniはこんな感じ。(一部抜粋です。dicon.iniは今回省略)

[DIContainer]
filename = dicon.ini

[InjectRequest]
dto = 

[Action]
dto = ref:dto

こうやれば、DIContainerのなかに「dto」という名前ではいってるので、Smartyファンクションができれば、以下のように呼べることになる。(もちろん、このDTOにリクエストパラメータをインジェクションするだけではなくて、ロジックの結果もいれる)

名前: {container target="dto.name"}<br>
処理結果: {container target="dto.result"}

targetの部分の書式のバリエーションを増やしていけば、「処理したactionの値をとる」ってので「action.name」とかとかけるようにできるかも。

かなりViewフィルターのえぐさは減るんではないでしょうかね。私のイメージはあくまでもテンプレート側から値をとってもらうというイメージなのでこうなります。スクリプト側からテンプレートに値をセットするというイメージを崩したいというのが当初の狙いだったし。このあたりに違和感をおぼえられるかたがまたでそうだな・・・

よりいい案があるぞーとかそんなのでは解決になってない!という方、意見ください。