テンプレートあれこれ

テンプレートファイル名のルール

テンプレートファイル名について、「とりあえず触ってみる」で以下のように書きました。

guessworkでは、テンプレートファイルを配置するディレクトリ名およびテンプレートファイル名はコントローラクラス名によって自動的に決定され、 SimpleControllerクラスが参照するデフォルトのテンプレートファイルは simple/default.html のようになります。

これはつまり、コントローラクラス名からControllerを省いて小文字にしたものが「ディレクトリ名」となり、アクションメソッド名から「execute」を省き小文字にて「.html」を付けたたものが「テンプレートファイル名」になるということです。

MailFormControllerのexecuteInput()のテンプレートファイルパス
mailform/input.html
userSearchControllerのexecuteSearch()のテンプレートファイルパス
usersearch/search.html

このテンプレートファイルパスは、コントローラクラスの「$_gw_template_templates_dir」クラス変数で指定されたテンプレートディレクトリを起点とした相対パスになります。

任意のテンプレートを表示する

前述のようなコントローラクラス名とアクションメソッド名から推測されたテンプレートではなく、任意のテンプレートを表示させたい場合は、Controllerクラスのrender()メソッドを使用します。

class SimpleController extends Controller
{
    // 設定部分は省略

    function executeDefault()
    {
        if (...) {
            return $this->render("simple/notice");
        }
    }
}

これで、if文の中が実行された場合には simple/notice.html が、それ以外の場合には simple/default.html がテンプレートとして表示されるようになります。

なお、render()メソッドの戻り値をreturnで返却していることに注意してください。これは、推測されたテンプレートが続けて表示されてしまうことを防ぐためです。

任意のステータスコードを返す

通常、アクションメソッドの実行が完了するとブラウザにはHTTPステータスコードとして200(成功)が送信されますが、これを任意の値に変更したい場合にもrender()メソッドを利用します。

return $this->render("simple/moved", 302);

上の例ではrender()メソッドの第二引数に302(転送)を指定しているため、ブラウザへのレスポンスは以下のようになります。

HTTP/1.1 302 Found
Date: Sat, 23 Oct 2004 19:33:33 GMT
(中略)
Content-Type: text/html