NAME
Waft - A simple web application framework
SYNOPSIS
Waft は、アプリケーションクラスの基底クラスとなって動作する、CGI用の フレームワークである。
package MyWebApp;
use base 'Waft';
__PACKAGE__->use_utf8;
__PACKAGE__->set_default_content_type('text/html; charset=UTF-8');
sub __default__direct {
my ($self) = @_;
return 'TEMPLATE';
}
クラスメソッド waft
は、アプリケーションクラスに属するオブジェクトを 生成して、リクエストに応じたメソッドをディスパッチする。
MyWebApp->waft;
また、テンプレート処理も実装している。
<%
use strict;
use warnings;
my ($self) = @_;
%>
<h1><% = $self->page %></h1>
<p>
Howdy, world!
</p>
DESCRIPTION
Waftは、1ファイルのみで構成された軽量の Webアプリケーションフレームワークであり、Perl 5.005 以上で動作する。(ただし、 UTF-8 を扱うには 5.8.1 以上の Perl と 3.21 以上の CGI が必要。)
リクエストに応じたメソッドのディスパッチ、 オブジェクト変数の保持、 テンプレート処理 等の機能を有する。
DISPATCH
Waft は、リクエストに応じたメソッドをディスパッチする。
例えば、CGI が QUERY_STRING を指定されずに単純に GET リクエストされた場合、 Waftは、__default__direct
という名前のメソッドを起動する。
http://www/mywebapp.cgi
$self->__default__direct を起動する
form.html というページをリクエストされた場合は、__form__direct
という名前の メソッドを起動する。
http://www/myapp.cgi?p=form.html
$self->__form__direct を起動する
form.html から "send" という名前の SUBMIT によりリクエストされた場合は、 __form__send
という名前のメソッド。
http://www/myapp.cgi?s=form.html&v=&send=
$self->__form__send を起動する
メソッド __form__send
が、"confirm.html" を戻した場合は、Waft は次に、 __confirm__indirect
という名前のメソッドを起動する。
sub __form__send {
my ($self) = @_;
return 'confirm.html';
}
$self->__confirm__indirect を起動する
ACTION METHOD
Waft がディスパッチするメソッドをアクションメソッドと呼ぶ。 アクションメソッドの名前は、page_id
と action_id
で構成する。
page
Web の 1ページに相当する単位で、アクションメソッド名の構成と テンプレートの選択のために使用する。
$self->page
で取得できる。page_id
page
の英数字以外の文字をアンダースコアに変換し、拡張子を除いた文字列。 form.html の場合は "form"、form/header.html の場合は、"form_header" となる。$self->page_id
で取得できる。action
page
へのリクエストの種別。page
とともに、 アクションメソッド名を構成する。リンクによるリクエストの場合は "direct"、 FORM からの SUBMIT によるリクエストの場合はその SUBMIT の NAME(以下の例では "send")、<input type="submit" name="send" /> ^^^^
クライアントからのリクエストではなく、メソッドの戻り値で指定された
page
への内部のページ遷移の場合は "indirect" となる。なお、FORM からの SUBMIT によるリクエストにおいて、SUBMIT に NAME が指定されていない場合、
action
は "submit" となる。<input type="submit" />
action_id
action
の先頭から . までの文字列。direct の場合は "direct"、move.map.x の場合は "move" となる。
アンダースコア 2つ、page_id
、アンダースコア 2つ、action_id
を連結した文字列をアクションメソッドの名前とする。
__ page_id __ action_id
return $page
アクションメソッドの戻り値を次に処理する page
として、 引き続きアクションメソッドのディスパッチを行う。この場合、action
は "indirect" とする。
return 'confirm.html'; # Waft は次に __confirm__indirect を起動する
ただし、戻り値を以下のように指定する事で、action
に "indirect" 以外の値も指定できる。
return ['form.html', 'direct']; # Waft は次に __form__direct を起動する
もしくは、
return { page => 'form.html', action => 'direct' }; # same as above
'CURRENT'
"CURRENT" は、"現在のページ" を意味する。すなわち return 'CURRENT'
は、 return $self->page
と同義である。
return 'CURRENT';
return $self->page; # same as above
return 'TEMPLATE'
アクションメソッドの戻り値が "TEMPLATE" の場合、 Waft はアクションメソッドのディスパッチを終了して、page
のテンプレート処理に移行する。
sub __form__direct {
return 'TEMPLATE'; # form.html のテンプレート処理に移行する
}
Waft は、"CURRENT" の場合と同様に page
を 変更せず、action
を "template" として処理する。すなわち return 'TEMPLATE'
は以下と同義である。
return ['CURRENT', 'template'];
もしくは、
return { page => 'CURRENT', action => 'template' };
begin
before
end
OBJECT VALUE
TEMPLATE METHOD
AUTHOR
Yuji Tamashiro, <yuji@tamashiro.org>
COPYRIGHT AND LICENSE
Copyright (C) 2007, 2008 by Yuji Tamashiro
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.