ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

コントローラでの処理に応じて、Viewを切り替えたい場合

なんかrender関係はそれなりに書いてるので、ひょっとしたら中身がかぶってるかもしれませんが、記事のタイトル的にビッコンバッコンなものが見あたらなかったので、ちゃんと書いておきます。

Mojavi系・・・というか、ポストMojaviなFW系は、controllerに相当するレイヤーでのアクションメソッドの戻り値は大抵、Viewの名称になってます。symfonyとかもそうです。ファイル名の時もあれば、適当な文字列"Success"とかで、それを下にテンプレート名を取得したりとかです。

ところがAkelosはControllerのアクションメソッドの戻り値は捨てられます。従ってreturn値でテンプレートを切り替えるテクニックは使えません。やろうとすれば、render()系のメソッドを開発者が手動で呼ぶ必要があります。・・・多分。

app/controllers/foo_controller.php:

<?php
class FooController extends ApplicationController {
    // ...
    function action() {
        // ...
        if ($condition) {
            $this->renderWithLayout(AK_VIEWS_DIR . '/foo/bar');
        } else {
            $this->renderWithLayout(AK_VIEWS_DIR . '/foo/baz');
        }
    }
}

上の例であれば、$conditionが成立しているときは foo/bar.tpl がViewとしてrenderingされ、成立しないときは foo/baz.tpl がViewとしてrenderingされるようになります。

とりあえず以上。