powered by nequal

rhaco1-doc :: 100-blog-tutorial/03-model-view-template.txt

http://wikihub.org/wiki/rhaco1-doc/100-blog-tutorial/03-model-view-template

Table of contents:

collapse all expand all

Updates:

Model - Template - View

rhaco の開発においては,いわゆる MVC モデルではなく MTV モデルに基づいた開発を行います.

ごく簡単にいうと,次のような対応になります.

  • Model -> Model
  • View -> Template
  • Controller -> View

ただし,単純に置き換えたのではなく,それぞれの持つ役割の度合いが MVC と比べて極めて異なっていることが rhaco での開発を勉強する中でわかるでしょう.

モデル

モデルは,rhaco アプリケーションの基本中の基本です.

モデルを介してデータベースとデータをやり取りするだけでなく,一覧 ( read ) ,表示 ( detail ) ,追加 ( create ) ,編集 ( update ) ,削除 ( drop ) といった操作に必要な土台となります.

rhaco のモデルクラスはわざわざ手を動かして作成する必要はありません. http://localhost/blog/setup.php にアクセスして, settings をクリックしてください. 自動的に /library/model の中にproject.xml で定義したモデルが生成されます.

/DocumentRoot
  /blog
    /library
      /model
        /table
          PostTable.php
        Post.php

PostTable クラスは project.xml で post テーブルの列情報(型や制限値,ラベル等)やアクセッサを実装したクラスで, settings 時に自動的に再生成されます.

Post クラスは,PostTable を継承しており,ファイルが存在しない場合にのみ settings 時に自動的に生成されます.

様々な機能をモデルに付加する際には,この Post モデルを変更します.

<?php
Rhaco::import("model.table.PostTable");
/**
 * 記事
 */
class Post extends PostTable{
 
}
 
?>

View

次に,投稿記事(post)に対する View (View)を作成...しません.

今回は,作成しなくてもできる内容ですので,まずは汎用 View を用いて投稿記事の一覧を表示しましょう.

例えば,ユーザが www.example.com/posts/index ( www.example.com/posts と同じです ) をリクエストした場合,投稿記事の一覧が表示されると期待するでしょう.

これを実現するために, /DocumentRoot/index.php を作成し,以下のように記述してください.

<?php
include_once dirname(__FILE__)."__init__.php";
Rhaco::import("generic.Urls");
Rhaco::import("database.DbUtil");
Rhaco::import("model.Post");
 
$db = new Dbutil(Post::connection());
$pattern = array(
	//投稿記事の一覧を表示
	"^posts(?:/index)?/?$"=>array("class"=>"generic.Views","method"=>"read","args"=>array(new Post())),
);
$parser = Urls::parser($pattern,$db);
$parser->write();
?>

ここでは,汎用 Views ( generic.Views ) の read メソッドを View として指定し,その引数として Post モデルのインスタンスを渡しています.

このコードについて少し説明しましょう.

  1. アプリケーションの初期設定ファイルを読み込みます.これは,settings 時に自動的に生成されます.
  2. URL ルーティングを行うためのライブラリと Post モデルを読み込みます.
  3. データベース操作ライブラリをインスタンス化し,その接続先をPostモデルから取得します.
  4. URLの正規表現をキーとしてルーティングの設定を記述します.
  5. Urls::parser() にこれらを渡して,出力するテンプレートがセットされたテンプレートパーサを取得します.
  6. テンプレートパーサにセットされているテンプレートファイルを出力する.

あるURLに特定の View を割り当てたいという誘惑には大いに負けてください.

テンプレート

現在,モデルにはデータが入り,View は汎用 Views を用いてますので作っていません.

今回は,記事投稿一覧 View のテンプレートを作成...する必要はありません.

rhaco では,汎用 Views を用いた場合には,デフォルトのテンプレートが使用されるため,開発初期段階ではテンプレートを作る必要が全くありません.

これで,一通り投稿記事の一覧を表示するための準備が整いましたので, http://localhost/blog/posts/ にアクセスしてみてください.

ご覧の通り,投稿記事の一覧が表示され,ソート,ページング,検索が標準で実装されています.

参考