Road to guesswork
さて、「高い保守性を維持しつつ、PHPで楽にコーディングしたい」をテーマにしたPHP用MVCフレームワーク「guesswork」のご紹介です(まだダウンロードはできませんです)。
基本はActionベースで、1つのスクリプトで1つのActionクラスを定義する形になります。最もシンプルな形のスクリプトは以下のようになります。
<?php
define("GUESSWORK_DIR", "/path/to/guesswork");
require_once GUESSWORK_DIR . "Guesswork.php";
class RegistrationAction extends AbstractAction { // デフォルトで実行される処理 function execute_default() { $this->setTemplate("registration_input.tpl"); return GW_SUCCESS; } }
$config = array( "template_dir" => ROOT_DIR . "smarty/templates/", "compile_dir" => ROOT_DIR . "smarty/templates_c/", "config_dir" => ROOT_DIR . "smarty/configs/", "cache_dir" => ROOT_DIR . "smarty/cache/", "dbparams" => "host=localhost dbname=foo", );
$controller = new Guesswork(); $controller->setConfiguration($config); $controller->setActionClass("RegistrationAction"); $controller->addInterceptor("*", new ParametersInterceptor()); $controller->dispatch();
exit; ?>
コントローラの起動までを各スクリプト中に記述するようになっているため、このファイル単独で動作します。Strutsのように一カ所でリクエストを受けてからActionを実行するモデルではありません。このような構造になっているため、他のサーバ上で実行させたい場合もguessworkさえインストールしてあれば、スクリプトをコピーするだけで動きます。また、設定項目はスクリプト中に記述するようになっているので、設定ファイルの類もありません。
guessworkのActionクラスでは、定義されているメソッド名によって動作が変わります(guessworkは当て推量という意味)。デフォルトではexecute_default()というメソッドが呼ばれますが、$_GET["mode"]または$_POST["mode"]が送信された場合にはその値に対応するexecute_xxx()が呼び出されます。つまりユーザー登録用のActionであれば、
execute_default() // 登録フォーム表示 execute_confirm() // 内容確認フォーム表示 execute_commit() // データベース更新&結果表示
のようなメソッドを定義するようになります。
各メソッドで共通の初期化処理(インスタンス変数の初期化など)を記述する場合はinit()というメソッドを定義しておくと、execute_*()の実行前に自動的に呼び出されるようになります。
init() // 共通の初期化処理 execute_default() // 登録フォーム表示 execute_confirm() // 内容確認フォーム表示 execute_commit() // データベース更新&結果表示
また、特定のmodeの場合のみ実行したい初期化処理というものもよくあります。例えば「登録フォーム表示前はデータベースから都道府県一覧を取得しておきたいが、confirm時やcommit時には処理をしない」というケースです。こういった場合には、prepare_default()というメソッドを定義しておくと、execute_default()が実行される場合のみ直前にprepare_default()が呼び出されます(当然、prepare_confirm()やprepare_commit()というメソッドも定義できます)。
init() // 共通の初期化処理 prepare_default() // 登録フォーム表示前の処理 execute_default() // 登録フォーム表示 execute_confirm() // 内容確認フォーム表示 execute_commit() // データベース更新&結果表示
これでActionの骨組みが出来たので、あとは各メソッドの中身を実装して、Smartyによるテンプレートファイルを用意すれば実装は完了となります。
で、肝心のguessworkが何処で入手できるかということですが…、まだ準備中なんです。すみません。

OZACC.blog, 6 月 25th, 2004 at 23:09 [Trackback]
guesswork
BMediaNode - weblog: Road to guesswork 「高い保守性を維持しつつ、PHPで楽にコーディングしたい」をテーマにしたPHP用MVCフレームワーク「guesswork」のご紹介です(まだダウンロードはできませんで…