読者です 読者をやめる 読者になる 読者になる

すがブロ

sugamasaoのhatenablogだよ

はじめての rhaco3(2)

rhaco3 php

今日の流れ

チュートリアルの続き「掲示板の作成」をやってみます。
今日は実際に動かすところと、気になる点をピックアップしておこうと思う。

動作確認をする

先日のエントリでDBファイル自体は作ったので、あとはそれを使う Web画面周りを作れば良い。で、それは
「掲示板の作成」のソースをコピればよいはずなので、board.php として内容をコピペした。
……が、それだけだと動かなかった。
画面に何も出力されず、apacheのエラーログには

[25-Dec-2010 00:22:59] PHP Fatal error:  Class 'org\rhaco\Conf' not found in htdocs/rhaco_ac_24/board.php on line 2

と表示される。
ウゥム、パッケージは vendors にあるのだがなんでだろう……としばらく悩んだのだけど、すわ、このファイル rhaco3 include してなくね!?という事に気がついたので、以下のようにしてみた。
あと、safariで見たら文字化けしたので charset の指定も追加した。

<?php
include('rhaco3.php'); // ここ追記
\org\rhaco\Conf::set('org.rhaco.store.db.Dao'
		,'Board'
		,'{"type":"org.rhaco.store.db.module.Sqlite","dbname":"board"}'
	);

/**
 * @var serial $id
 * @var string $name
 * @var text $comment
 * @var timestamp $created_at @{"auto_now_add":true}
 */
class Board extends \org\rhaco\store\db\Dao{
	protected $id;
	protected $name;
	protected $comment;
	protected $created_at;
}

$req = new \org\rhaco\Request();
if($req->is_post()){
	$obj = new Board();
	$obj->name($req->in_vars("name"));
	$obj->comment($req->in_vars("comment"));
	$obj->save();
}

$paginator = new \org\rhaco\Paginator(5,$req->in_vars("page",1));
$template = new \org\rhaco\Template();
$template
	->set_object_module(new \org\rhaco\flow\module\HtmlFilter())
	->set_object_module(new \org\rhaco\flow\module\Paginator());
$template->vars("object_list"
	,Board::find_all($paginator,\org\rhaco\store\db\Q::order('-id'))
);
$template->vars("paginator",$paginator);
$template->output(__FILE__);
?>

<rt:template>
<html>
<head>
	<meta charset='utf8' /> <!-- ここ追記 -->
</head>
<body>
	<form method="post">
		名前:<input type="text" name="name" rt:ref="true" /><br />
		コメント:<textarea name="comment"></textarea><br />
		<input type="submit" value="投稿" />
	</form>
	<rt:loop param="object_list" var="obj">
		<div>
			{$obj.name()} [{$obj.fm_created_at()}]
		</div>
		<pre>
			{$obj.comment()}
		</pre>
		<hr />
	</rt:loop>
	<div class="paginator">
	<rt:paginator />
	</div>
</body>
</html>
</rt:template>

これで動いた!やったー。

この後は

この動いたソースから rhaco の特徴を調べていきたい。
チュートリアルでも赤字になってたし、以下に付いて深堀りすれば rhaco の良さにたどり着くのだろうと思っている。

  • DBのBoardクラス
  • Template クラス(とHTMLのテンプレート)

とはいえ、これだけでは何なのでもうちょっと詳しく気になる点を書いてみる。

  • DB の Board クラス

これ、\org\rhaco\store\db\Dao を継承しているのだけど、さらにその継承元をたどると Object クラスになる。
で、Object クラスってなんだよっていうと、ドキュメントでも真っ先に書かれるくらい重要なクラスなのだろうと思う。あと、おそらくアノテーションを使った引数指定とかができるんじゃないかなぁと漠然と思っている。

  • Template クラス(とHTMLのテンプレート)

これはソースを見ればわかるとおり、HTMLのテンプレート。今回の例だとページネイションがスゴい楽に実装できて良いのだけど、真価はテンプレートの継承らしい。rhaco2とかのドキュメント見ればわかるのだろうか。。。