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

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

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

一覧画面を出力してみる

Flow, DbUtil を組み合わせて,DBから取得したToDoをHTMLで一覧にしてみます。

次のようなコードになります。

flow.php

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

$db = new DbUtil(Todo::connection());
$flow = new Flow();
$flow->setVariable('object_list', $db->select(new Todo()));
$flow->write('list.html');

DbUtilのselectメソッドには,取得したいテーブルのモデルインスタンスを与えます。返り値はモデルオブジェクトの配列となります。つまり,object_list には配列型がセットされます。これをテンプレートでループして一覧を実現します。

DBの操作も,ごく簡単な操作だけで行えることがわかってもらえると思います。

テンプレートは次のようなものになります。あまりにも殺風景だったので,簡単なCSSを追加しているので少し冗長に見えますが,一覧に関係しているのは table の部分のみです。

resources/templates/list.html

<html>
<head>
  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
  <title>kaeru :: todo manager on rhaco</title>
  <style type="text/css">
    table#todo th, table#todo td {
      padding: .3em;
    }
    table#todo th {
      background: #aaa;
    }
    table#todo tr.odd {
      background: #dcdcdc;
    }
  </style>
</head>
<body>
  <h1>todo manager</h1>
  <h2>list</h2>
  
  <table id="todo" rt:param="object_list" rt:var="object">
    <tbody>
      <tr class="even">
        <td>{$object.subject}</td>
        <td>{$f.text2html($object.description)}</td>
        <td>{$object.captionPriority()}</td>
      </tr>
    </tbody>
    <thead>
      <tr>
        <th>subject</th>
        <th>description</th>
        <th>priority</th>
      </tr>
    </thead>
  </table>
</body>
</html>

今回使用したテンプレートの記法について解説します。

rt:param, rt:var

ループさせたい table, ul, select の属性として指定します。param には変数名,var にはループ内で用いる変数を設定します。

tableで利用する場合,tbodyがあるとその内部についてのみループします。また,class要素に⁠even⁠または⁠odd⁠を指定すると,ループ内で even/odd が交互に出力されます。

{$f.text2html()}

テンプレートの予約変数 $f は,tag.model.TemplateFormatter に存在します。

text2htmlメソッドは,文字列をエスケープしたあと,改行に <br /> を追加します。引数を設定すると文字数や行数の制限も可能です。

flow.php にアクセスして一覧が表示されているのを確認してみましょう。

画像

これで今回の目標達成です。お疲れ様でした。

管理画面から,ToDoを追加したり削除したりして一覧が更新されるか試してみるのもよいでしょう。

次回予定は,Flow+DBをもっと簡単にするViewsという仕組みで一覧から,追加までを実装していきます。

著者プロフィール

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

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

URLhttp://riaf.jp/