シンプル&パワフルなPHPライブラリ rhacoを使ってみよう!

第4回 rhacoアプリの基礎 Flow を学ぶ

この記事を読むのに必要な時間:およそ 3 分

前回までで,基本的なアプリケーションの土台はほぼ完成しました。今回は,rhacoを用いたアプリケーション開発の基本となる Flow という機構をつかって,ToDoデータの一覧画面を実際に構築してみます。

Flow とは

ウェブアプリケーションでは,ユーザーからのリクエストを受けてリクエストに見合った出力(HTML)を返すまでが一連の動作となりますが,rhacoでは基本的にそれぞれをリクエストクラス(network.http.Request),テンプレートクラス(tag.HtmlParser)として扱います。

しかし,これらは一般的にはいつもセットで使われるので,それらを統合したクラスが提供されています。それが,今回のメインとなる Flow(generic.Flow)です。

簡単な使用方法

まずは簡単な例をお見せします。

アプリケーションのディレクトリに hello.php として,次のようなファイルを作成してみましょう。

<?php
require_once '__init__.php';
Rhaco::import('generic.Flow');

$flow = new Flow();
// greeting に "Hello!" をセット
$flow->setVariable('greeting', 'Hello!');
if(!$flow->isVariable('name')){
    // name が与えられなかったら Guest をセット
    $flow->setVariable('name', 'Guest');
}
$flow->write('hello.html');

ここでは,Flowのみを使って,テンプレートの出力まで行っています。

最初の行の __init__.php で,アプリケーションの初期化を行います。__init__.php 内部で __settings__.php を読み込んでいるので,セットアップアプリケーションで設定した値などの読み込みや,rhaco本体の読み込みなどを行います。Rhaco::import については第1回でも利用しましたね。

このコードでは, http://localhost/kaeru/hello.php に,「?name=なまえ」とクエリパラメータを与えると,出力も変わるようにしています。

画像

テンプレートファイルは,アプリケーションのディレクトリ内 resources/templates に設置します。セットアップアプリケーションから,テンプレートのディレクトリを変更することもできます。

ここでは,resources/templates/hello.html として,次のようなファイルを作成しました。

<html><body>
<h1>Greeting Sample</h1>

{$greeting} {$name}

</body></html>

これは,RequestとHtmlParserを使った次のようなコードとほぼ同じ意味を持ちます。

<?php
require_once '__init__.php';
Rhaco::import('network.http.Request');
Rhaco::import('tag.HtmlParser');

$request = new Request();
$parser = new HtmlParser();
// テンプレート変数 greeting に "Hello!" をセット
$parser->setVariable('greeting', 'Hello!');
$parser->setVariable('name', $request->getVariable('name', 'Guest'));
$parser->write('hello.html');

前述したコードと少し違う点にお気づきでしょうか?

getVariableメソッドに第二引数を渡すと,その値をデフォルトの値として扱うことができます。これを利用すると最初のコードももっと簡潔に書けそうですね。

それでは,実際にDBからToDo一覧を取得して表示するFlowを作成してみましょう。

DBに接続をする

第3回「データベースの設定と作成」で既にDBの準備はOKですね。

アプリケーション内でDBに接続するには DbUtil(database.DbUtil)というクラスを利用します。

DB設定は projext.xml の各databaseによって接続先が変わることも考えられるので,テーブルモデルクラスを利用してDbUtilへ接続情報を与えます。

テーブルモデルは,library/model に生成されています。Rhaco::import は,rhaco内部のライブラリだけではなく,アプリケーションのlibrary以下のファイルを読み込むときにも使用します。

<?php
require_once '__init__.php';
Rhaco::import('database.DbUtil');
Rhaco::import('model.Todo');

// DbUtil に,Todoモデルクラスの connection メソッドの返り値を渡す
$db = new DbUtil(Todo::connection());

これで,DBへの接続は完了です。

著者プロフィール

佐藤佳祐(さとうけいすけ)

北海道の大学に在籍し,現在は絶賛就職活動中。nequalに所属し,PEARリポジトリサービス「Openpear」開発を担当。最近はrhaco2と格闘する日々。お仕事の話,待ってます。

URLhttp://riaf.jp/

コメント

コメントの記入