A simple mailform written by PHP
このページではTerrierで利用しているテンプレートエンジンについて解説します。
TerrierのテンプレートエンジンはPHPコードとして即時コンパイルして実行されます。一時ファイルは生成しません。
テンプレートエンジンはHTML中に"{{XXXX}}"
の形式で指定された部分に変数をバインドします。オブジェクトや連想配列の値は"."
のシンタックスでアクセスできます。
Terrier側で予めアサインされた以下の値が使用でき、出力する値は全てエスケープされます。
{{post.フィールド名}}
- POSTされた値を出力します。{{get.パラメータキー}}
- GETパラメータの値を出力します。{{server.パラメータキー}}
- $_SERVERの環境変数の値を出力します。{{value.フィールド名}}
- バリデーション通過後のフィールドの値を出力します。{{error.フィールド名}}
- バリデーションエラーの文字列を出力します。バリデーションに通過している場合は空文字となります。{{action.input}}
- 入力画面へのURLを出力します。{{action.confirm}}
- 入力画面へのURLを出力します。{{action.error}}
- 入力画面へのURLを出力します。例えば、name
フィールドへの値の設置とバリデーションエラーの出力は以下のようになります。
<input type="text" name="name" value"{{value.name}}">
<p class="error">{{error.name}}</p>
なお、"{{%アクセス名}}"
とすることで、エスケープしない値を出力することも可能ですが、非推奨です。
テンプレート中では"if"
と"for"
の構文が使用できます。判定条件はPHPと同じですが、変数へのアクセスは"isset()"
で自動チェックされます。
// バリデーションエラーがあれば表示する
{{if error.name}}
<p class="error">{{error.name}}</>
{{/if}}
数値判定なども可能です。
// 選択値が1より大きい場合に文言を表示
{{if value.select > 1}}
<p>選択値が1より大きいです</>
{{/if}}
テンプレート内のループ構文は"for"
が使えます。内部ではオブジェクト、配列、連想配列に関わらず全てループ可能です。ループ中は"@index"
でキーに、"@data"
で値にアクセス可能で、ループ対象の値が配列などの場合はそのままドットでアクセスすることが可能です。
// バリデーションエラー一覧を出力
{{for error}}
<p class="error">フィールド名:{{@index}}、メッセージ:{{@data}}</>
{{/for}}
"@parent"
でループ中の親オブジェクトにアクセス可能です。
"{{#ヘルパ関数}}"
と記述することで、ヘルパ関数を呼び出すことが可能です。
ヘルパ関数はPHP組み込みの関数の他に、テンプレートディレクトリ内のfunctions.php
で定義した関数を呼び出し可能です。
// functions.phpで定義した関数を呼び出します
{{#input_hidden_all}}
// PHP組み込みのdate関数を呼び出します。引数を渡す場合は半角スペースに続いて指定します。
{{#date 'Y-m-d'}}