rhacoで簡単な掲示板を作ってみる


rhacoとは?

rhacoはPHP4/5で動作するライブラリ的性質を持ったフレームワークです。
PHPの良さを失わずに、どこにでも簡単に、誰でも簡単に、柔軟性の高いWebアプリケーションの構築を行うことができるよう設計されています。
(http://rhaco.org/tutorial/overview/)

大まかな手順

  1. 新しくディレクトリを作ってrhaco/setup.phpをそこにコピー
  2. コピーしたsetup.phpにアクセスしてrhacoのパスを入力
  3. project.xmlをいじる
  4. 使用するデータベースと詳細を設定する
  5. テーブルを生成する
  6. コードとテンプレートを少しばかり書く
  7. 動作を確認する

今回使用したrhacoは開発レポジトリ版のリビジョン2835です。
サーバはすでに立ててるものとして話を進めます。

1. 新しくディレクトリを作ってrhaco/setup.phpをそこにコピー


simplebbsというディレクトリを作ってそこにsetup.phpをコピーします。

2. コピーしたsetup.phpにアクセスしてrhacoのパスを入力


rhacoのパスを入力して進むとこれから作るアプリケーションの設定画面が出てきます。

とりあえずこの設定は飛ばして右上のproject.xmlリンクたどって下さい。

3. project.xmlをいじる


使用するデータベースのテーブル、コラムやアプリケーション固有の情報などを設定します。
とりあえずここではデーターベースの設定を行います。

<project rhacover="1.4.9" version="0.0.1" name="simplebbs" 
xmlns="http://rhaco.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://rhaco.org http://media.rhaco.org/project.xsd">
<database name="bbs" renew="true">
  <table name="articles" admin="true">
    <column name="name" require="true" type="string" size="50"/>
    <column name="comment" require="true" type="text" size="900"/>
  </table>
</database>
</project>

と入力して更新ボタンを押します。

書式はこの辺を参考に

4. 使用するデータベースと詳細を設定する

settings画面に戻ります。

データベースはSQLiteを使います。
必要な設定を行います。

データベースの設定とは別に、なにかエラーが出てもわかるように上のように設定しておきます。
ページ下部のsettingボタンを押して設定完了です。

5. テーブルを作成する


設定が済むとページ上部にdatabase欄が現れるのでクリックします。

テーブル作成をクリックします。
何もエラーが起きなければ成功です。

6. コードとテンプレートを少しばかり書く

path/to/simplebbs/index.php

Articlesクラスはproject.xmlからrhacoが生成してくれたものです。
Flowクラスはテンプレートやリクエスト、セッションなどを司る便利なクラスです。

<?php
include_once dirname(__FILE__) . '/__init__.php';
Rhaco::import('generic.Flow');
Rhaco::import('exception.ExceptionTrigger');
Rhaco::import('model.Articles');
Rhaco::import('database.DBUtil');

$flow = new Flow();
$dbutil = new DBUtil(Articles::connection());

if ($flow->isPost()) {
  $a = new Articles();
  $flow->toObject($a);
  $dbutil->insert($a);
  $flow->setSession('name', $a->name);
  if (!ExceptionTrigger::invalid()) $flow->redirect(Rhaco::url());
}

$result = $dbutil->select(new Articles());
if ($flow->isSession('name')) $flow->setVariable('name', $flow->getSession('name'));
$flow->setVariable('articles', $result);
$flow->write('index.html');
path/to/simplebbs/resources/templates/index.html

テンプレートです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>bbs</title>
</head>
<body>

<h1>bbs</h1>

<rt:invalid name="exceptions" var="errors">
   <rt:loop param="errors" var="err">
     <p>{$f.escape($err)}</p>
   </rt:loop>
</rt:invalid>

<form action="{$rhaco.self()}" method="POST">
  <input type="text" name="name" reference="true" size="40" value="{$f.escape($name)}"/>:name<br/>
  <textarea name="comment" reference="true" cols="40" rows="5"/>:comment<br/>
  <input type="submit" value="submit"/>
</form>

<hr>

<rt:loop param="articles" var="article">
  <p>name: {$f.escape($article.name)}<br/>
  {$f.nl2br($f.escape($article.comment))}</p>
  <hr>
</rt:loop>

</body>
</html>

テンプレートの記述方法は以下を参考に。

7. 動作を確認する

simplebbs/index.phpにアクセスして試してみましょう。
成功すれば以下のように書き込めるはずです。

何も入力せずに投稿してみても、rhacoがうまいことメッセージを出してくれることを確認してみてください。

最後に

まだrhaco触りたてなので何か間違っているところがあったら教えてください><

参考にしているページ、サイト等