index.php
アプリケーションのスクリプトですね。
require dirname(__FILE__)."/__settings__.php";
冒頭で同階層にある __settings__.php をrequireしています。
rhaco2の機能のみを使っているので、これ以外にはrequireしていませんね。
では、 __settings__.php をみてみましょう。
__settings__.php
このファイルには直にファイルパスが記述されています。
開発環境ごとに、また本番環境でも別のファイルとして必要ですので、構成管理の対象外にしておいた方が無難でしょう。
require_once("/Users/makoto/Code/rhaco2std/core/jump.php");
App::config_path(__FILE__,"http://localhost/calc/","/Users/makoto/Code/rhaco2std/apps/calc/work/");
jump.php をrequireし、アプリケーションのルートパス(渡してるのはファイルパスですが、内部でディレクトリに変換されています)・アプリケーションの基点URLとワークディレクトリの情報をAppに設定しています。
このAppクラスはjump.phpで spl_autoload_register に登録している autoload_handler でフォールバックされているクラスです。
__settings__.php さえ読み込んでおけば、rhaco2の基本的なクラスは未定義で利用できます。
rhaco2のクラス実装を確認した場合には、 core/jump.php のswitch文からクラスファイルの場所をたどればよいでしょう。
続けてindex.phpを見ていきましょう。
$flow = new Flow();
$result = "";
if($flow->is_vars("calc")){
$arg1 = $flow->in_vars("arg1",0);
$arg2 = $flow->in_vars("arg2",0);
switch($flow->in_vars("calc")){
case "add": $result = $arg1 + $arg2; break;
case "subtract": $result = $arg1 - $arg2; break;
case "multiply": $result = $arg1 * $arg2; break;
case "divide": $result = $arg1 / $arg2; break;
}
}
$flow->vars("result",$result);
$flow->output("display.html");
このFLowを使うのが基本のようです。Request処理とResponse処理をまかないます。
$flow->is_vars は、リクエストに指定の名前で値が渡されているか確認します。
$flow->in_vars は、リクエストから同名で送信されてきた値を取り出します。第二引数はおそらくデフォルト値でしょう。
$flow->vars は、第一引数の名前で、第二引数の値をコンテキストに詰めます。
$flow->output は、指定のテンプレートをレンダリングして結果を出力します。
この時テンプレートファイルを探索するディレクトリは、base_template_pathがFlowにセットされていない場合には、 アプリケーションルート/resources/templates になるようです。
さらに display.html も見てしまいます。
<html>
<body>
<form rt:ref="true">
ARG1: <input type="text" name="arg1" />
ARG2: <input type="text" name="arg2" />
<input type="submit" name="calc" value="add" />
<input type="submit" name="calc" value="subtract" />
<input type="submit" name="calc" value="multiply" />
<input type="submit" name="calc" value="divide" />
<br/>
<br/>
<br/>
<br/>
<rt:if param="{$result}">
Result: {$t.html($result)}
</rt:if>
</form>
</body>
</html>
formタグに rt:ref という見慣れないアトリビュートがあります。 rt: がrhaco2のテンプレートタグ機能のようです。このrt:refは、コンテキストに同名で値が入っていると自動フィルするための設定です。サンプルではformタグに設定されていますが、個別のinputタグに設定もできます。
rt:if でコンテキストにresultという名前で値が設定されているかを確認し、値があった場合には $t.html でエスケープして出力しています(出力は {$keyname} ですね)。