rhacoの利点等
どうやらphpのフレームワークの場合、あまりO/R等はメジャーではないようです。
→ rhacoにはバリデータ込みのO/Rマッパーがあります。
どうやらphpのフレームワークはPear等の別ライブラリが必要なことが多いようです。
→ rhacoは他のライブラリを必要としません(djangoみたい!)。mb_系は入っていると便利ですが。
どうやらphpのフレームワークはTemplateのextendsができないようです。
→ rhacoはブロックという単位のincludeと、ブロックという単位のextendsに対応しています(extendsは0.93から)。
どうやらphpのフレームワークは、phpであるにもかかわらずshellの利用が必要な場合があるようです。
→ rhacoはブラウザとテキストエディタがあれば開発できます(TrueStudio推奨)。
開発の進め方
rhacoのページ からダウンロードリンク(Quick Link → release)を辿って、rhacoの最新版をダウンロードします(sourceforge)。 (その際、goesbyというサンプルアプリケーションもダウンロードすると、使い方のサンプルになります。goesbyはhttp://www.goesby.c om/で動作しているソーシャルブックマークアプリケーションです)
ダウンロードしたrhaco.zipを解凍し、rhacoディレクトリをapacheが読み込み可能な場所に配置します。 Document rootより下に置く必要はありません(今回の例ではapacheの直下におきました)。
Document rootの下にプロジェクト用のディレクトリを作成します(root直下で使いたい場合は不要)。
rhacoディレクトリの直下にある**setup.php**を、プロジェクト用のディレクトリの中にコピーします。
それでは、setup.phpを表示してみましょう。 rhacoのpathを入力する用に要求されます。 rhacoを配置したディレクトリを指定してください。
「設定ボタン」をクリックすると、追加入力画面へ遷移します。 テンプレートのキャッシュ等いろいろな設定がありますが、今回は一番したの囲み「アプリケーション」にある「サンプルアプリケーション」にだけチェックを入れて「生 成する」ボタンをクリックしてください(権限がありませんというメッセージが表示されたら、apacheがプロジェクトディレクトリに書き込み可能な権限を付与して ください)。
プロジェクトディレクトリの中身を見てください。setup.php以外にファイルやディレクトリが生成されているはずです。 setupディレクトリの中には、project.xmlというファイルがあります。
このファイルにプロジェクトに関する内容を設定します。 サンプルアプリケーションとして、index.phpというファイルができています。 index.phpをブラウザで呼び出してみてください。入力フィールドが並んでいるはずです。 値を入力してサブミットすると、同じ画面に戻ってくるというだけのものですが、入力した値を保持しているはずです(0.93はcheckboxとradioの動作が おかしい?)。 これは、index.phpとresources/templates/index.htmlで動作しています。
次に、setup/project.xmlをいじってみましょう。下記のように記述してください。(もし利用するデータベースにアプリケーションから接続するデータ ベースユーザを作成していない場合には作成しておいてください)
<project rhacovar="0.9.3">
<database name="test">
<table name="bbs">
<column name="id" type="serial" />
<column name="name" type="string"
size="20" require="true" />
<column name="comment" type="string"
size="100" />
</table>
</database>
</project>
再びsetup.phpをブラウザで開いてください。今度は中間あたりにデータベースの設定が増えているはずです。
利用するデータベースを選択し、データベース接続ユーザやパスワード等を埋め、テーブル作成にチェックを入れて「生成する」ボタンをクリックしてください(テーブル接頭語は一つのデータベースで複数のアプリケーションを動作可能とするための便利機能です)。
library/dataディレクトリにたくさんのファイルができているはずです。O/Rで利用するクラス群です。
index.php/index.htmlをそれぞれ次のように修正してください。
<?php
require_once("./__init__.php");
Rhaco::import("tag.HtmlParser");
Rhaco::import("network.http.Request");
Rhaco::import("database.data.Criteria");
Rhaco::importLibrary("DbUtilTest.php");
Rhaco::importLibrary("data.Bbs");
$request = new Request();
$htmlParser = new HtmlParser();
$dbUtil = DbUtilTest::instance();
if($request->isPost()) {
if(false == $dbUtil->insert($request->toObject(new Bbs()))) {
$htmlParser->setVariable($request->getVariable());
}
}
$object_list = $dbUtil->select(new Bbs(), new Criteria());
$htmlParser->setVariable("object_list",$object_list);
$htmlParser->write("index.html");
?>
<html>
<head>
<title>index</title>
</head>
<body>
<form method="post">
name:<input type="text" name="name" reference="true" /><br />
comment:<textarea name="comment" reference="true"></textarea>
<input type="submit" value="submit" />
</form>
<ul>
<rt:loop param="object_list" var="msg">
<li>{$formatter.escape($msg.name)} :<br />
{$formatter.escape($msg.comment)}</li>
</rt:loop>
</ul>
</body>
</html>
では、index.phpを表示してみましょう。 入力フォームがありますので、何も入力せずに「submit」ボタンをクリックしてみましょう。 何もおきませんよね。では、comment欄にだけ文字を入力して「submit」ボタンをクリックしてみましょう。入力がのこったまま元に戻ってきましたよね?
これは、project.xmlに設定したrequired="true"が効いているため、バリデータに止められてもとのページに戻ってきたのです。本来であれば、各入力フォーム毎にエラーメッセージの表示を行うのですが、やり方を忘れてしまったのではしょりました :)
では、nameとcommentに値を入力して「submit」ボタンをクリックしてください。メッセージが表示されましたね?操作を繰り返すとどんどん増えていきます。
今回はページング等の実装はしませんでしたが、countやoffset、limit、も容易に扱えるので(SQL文はたいていの場合書く必要はありません。unionまでO/Rで扱えますよ)、goesbyのソースを眺めたり、 rhac-jaメーリングリスト に質問をしたりしてrhacoを楽しんでみてください。