rhaco1.0.1用の簡易チュートリアル
rhaco1.0.1用の簡易チュートリアル
スパムとかにて書かれていたrhaco0.93用の簡易チュートリアルが最新版とは違う部分がある為、1.0.1用のチュートリアルを書いてみました。
基本的にはスパムとかのチュートリアルと同じ事をします。
開発の進め方
rhacoのページからダウンロードリンク(Quick Link →download)を辿って、rhacoの最新版をダウンロードします。
ダウンロードしたrhaco_1_0_1.zipを解凍し、rhacoディレクトリをapacheが読み込み可能な場所に配置します。
今回はMAMPを使用しているので、MAMP/htdocsの下に置きます。
Document rootの下にプロジェクト用ディレクトリを作成します。
rhaco直下のsetup.phpを、プロジェクト用ディレクトリの中にコピーします。
ブラウザからhttp://localhost/test/setup.phpを表示させます。
基本設定のRhacoのパスについてはプロジェクト用ディレクトリがrhacoと同階層にある場合は自動的に入ります。
同階層でない場合はpath設定画面が表示されますので、入力フィールドにpathを入力してください。
テンプレートのキャッシュ等いろいろな設定がありますが、今回は一番したの囲み「アプリケーション」にある「サンプルアプリケーション」にだけチェックを入れて「生成する」ボタンをクリックしてください(権限がありませんというメッセージが表示されたら、apacheがプロジェクトディレクトリに書き込み可能な権限を付与してください)。

サンプルアプリケーションにチェックを入れる posted by (C)venten
問題なく完了したら、プロジェクトディレクトリの中身を見てください。
setup.php以外にファイルやディレクトリが生成されているはずです。
setupディレクトリの中には、project.xmlというファイルがあります。

生成されたディレクトリ posted by (C)venten
このファイルにプロジェクトに関する内容を設定します。
サンプルアプリケーションとして、sample.phpというファイルができています。
sample.phpをブラウザで呼び出してみてください。入力フィールドが並んでいるはずです。
値を入力してサブミットすると、同じ画面に戻ってくるというだけのものですが、入力した値を保持しているはずです。
これは、sample.phpとresources/templates/sample.htmlで動作しています。
次に、setup/project.xmlをいじってみましょう。下記のように記述してください。(もし利用するデータベースにアプリケーションから接続するデータベースユーザを作成していない場合には作成しておいてください)
<project rhacovar="1.0.1">
<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をブラウザで開いてください。今度は中間あたりにデータベースの設定が増えているはずです。

データベースの設定 posted by (C)venten
利用するデータベースを選択し、データベース接続ユーザやパスワード等を埋め、テーブル作成にチェックを入れて「生成する」ボタンをクリックしてください(テーブル接頭語は一つのデータベースで複数のアプリケーションを動作可能とするための便利機能です)。
library/dataディレクトリにたくさんのファイルができているはずです。O/Rで利用するクラス群です。
sample.php/sample.htmlをそれぞれ次のように修正してください。
sample.php
<?php
require_once("./__init__.php");
Rhaco::import("tag.HtmlParser");
Rhaco::import("network.http.Request");
Rhaco::import("database.data.Criteria");
Rhaco::import("DbUtil.php");
Rhaco::importLibrary("data.Bbs");
$request = new Request();
$htmlParser = new HtmlParser();
$dbUtil = new DbUtil(Bbs::connection());
if($request->isPost()) {
if(false == $dbUtil->insert($request->toObject(new Bbs()))) {
$htmlParser->setVariable($request->getVariable());
}
}
$object_list = $dbUtil->select(new Bbs());
$htmlParser->setVariable("object_list",$object_list);
$htmlParser->write("sample.html");
?>
sample.html
<html>
<head>
<title>index</title>
</head>
<body>
<form method="post">
name:<input type="text" name="name" reference="true" />
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)} :
{$formatter.escape($msg.comment)}</li>
</rt:loop>
</ul>
</body>
</html>
では、
入力フォームがありますので、何も入力せずに「submit」ボタンをクリックしてみましょう。
何もおきませんよね。それでは寂しいのでバリデータを仕込んでみます。
sample.htmlに次のような追加をしてください。
<rt:invalid name="exceptions" var="exceptions">
<ul class="exceptions">
<rt:loop param="exceptions" var="exception">
<li>{$exception}</li>
</rt:loop>
</ul>
</rt:invalid>
再度、何も入力せずに「submit」ボタンをクリックすると「NAMEは必須です」とメッセージが表示される筈です。
では、comment欄にだけ文字を入力して「submit」ボタンをクリックしてみましょう。
入力がのこったまま元に戻ってきましたよね?
これは、project.xmlに設定したrequired="true"が効いているため、バリデータに止められてもとのページに戻ってきたのです。
では、nameとcommentに値を入力して「submit」ボタンをクリックしてください。メッセージが表示されましたね?操作を繰り返すとどんどん増えていきます。

complete posted by (C)venten
今回はページング等の実装はしませんでしたが、countやoffset、limit、も容易に扱えるので(SQL文はたいていの場合書く必要はありません。unionまでO/Rで扱えますよ)rhac-jaメーリングリストに質問をしたりしてrhacoを楽しんでみてください。
Tag is rhaco | comment(3391) | at 2007/02/15