CGI::Application::DispatchとCGI::Application::Plugin::TTを使ってみた
CGI.pmをベースとしたCGIアプリケーションを作成するためのフレームワークのCGI::Application::Dispatch。
- ディスパッチ処理
- http://example.com/app.cgi/index/
- http://example.com/app.cgi/hoge/search/ など、URIによって処理を変える事ができる。
- Perldocやnaoyaさんの記事などでは、http://example.com/app.cgi/モジュール名/run_mode名/などとすると良いそうです。
- テンプレートの対応
- HTML::Template,プラグインでTT(Template-Toolkit)にも対応しています。
今回の例ではapp.cgiと./libと./templateというパスが出てきますが、階層はこんな感じ。
/wwwroot | |---app.cgi |---lib/ | |---Hoge/ | |---App.pm | |---Index.pm |---template/ |---index.tt |---error.tt
app.cgi
#!/usr/local/bin/perl use strict; use lib qw(./lib); # モジュールのディレクトリを指定 use CGI::Application::Dispatch; CGI::Application::Dispatch->dispatch( prefix => 'Hoge', default => 'Index', );
Hoge::App.pm
package Hoge::App; use strict; use base qw (CGI::Application); use CGI::Application::Plugin::TT; sub cgiapp_init { my $self = shift; $self->tt_config( TEMPLATE_OPTIONS => { INCLUDE_PATH => "./template", }, ); } sub cgiapp_prerun { my $self = shift; $self->header_props( -charset => "utf-8" ); } 1;
package Hoge::Index; use strict; use base qw (Hoge::App); sub setup { my $self = shift; $self->start_mode('index'); #デフォルトページ $self->error_mode('error'); # エラーページ # /app.cgi/*で実行 # /app.cgi/indexだと、do_indexというサブルーチンが実行される $self->run_modes( index => 'do_index', error => 'do_error', ); } sub do_index { my $self = shift; my $q = $self->query; $self->tt_process('index.tt', { query => $q }); } sub do_error { my $self = shift; my $q = $self->query; $self->tt_process('error.tt', { query => $q }); } 1;
参考サイト
- 第6回 Webアプリケーション開発にチャレンジ【前編】 (1/3) - ITmedia エンタープライズ
- 最終回 Webアプリケーション開発にチャレンジ【後編】 (1/3) - ITmedia エンタープライズ
- CGI::Application - 再利用可能なWEBアプリケーションを構築するためのフレームワーク
- CGI::Applicationを使ったアンケートプログラムの習作
- CGI::Application::Dispatchまとめ : おまえのログ
本家のサイト