2005-04-21
SledgeLike - CGI::Application を Sledge っぽく使ってみる
はじめに
Sledge は便利だけど、ちょっと(だいぶ?)大きい。
CGI::Application は便利だけど、Sledge ほどは気が利いていない。
というわけで、その間を埋めるモノを作ってみた。大雑把には Sledge のサブセット、と言えなくもないかもしれない。
概要
基本的には Sledge + Sledge::DispatchQuery に似てる(予定)。
Sledge::Pages の代わりに SledgeLike に差し替えれば動く(予定)。
Sledge::Config はないので、その辺りの設定は起動スクリプトに記述しなくちゃいけない(少なくとも現状では)。
というわけで、
――とかすると、Sledge じゃなくて CGI::Application で動くコードに早変わりして(するといいなぁ)、Sledge がインストールできないサーバでも動かせるようになります(たぶん)。
もっとも、CGI::Application + CGI::Application::Session をインストールできるのかっていう問題がありますけどね。。。
使い方
webapp.cgi:
#!/usr/bin/perl use strict; use HelloWorld::Pages::Index; #HelloWorld::Pages::Index->dispatch_query( ".cmd" ); # Sledge my $cgiapp = HelloWorld::Pages::Index->new( # CGI::Application TMPL_PATH => '/path/to/template/dir', PARAMS => { session_dir => '/path/to/tmp/session', # Session利用時 foo => 'foo', bar => 'Bar', }, ); $cgiapp->mode_param( ".cmd" ); $cgiapp->run; __END__
HelloWorld/SledgeLike.pm:
package HelloWorld::SledgeLike; use strict; use base qw(SledgeLike); # CGI::Application # 以下、HelloWorld::Pages に追加したメソッドなどを適当に。 1; __END__
HelloWorld/Pages/Index.pm:
package HelloWorld::Pages::Index; #use base qw(HelloWorld::Pages); use base qw(HelloWorld::SledgeLike); # 以下、元の HelloWorld::Pages::Index。 1; __END__
以上のような変更で動作するようになります(たぶん)。
Sledge の機能を使いまくってると動きません。
Pages::* をちょこちょこ書いてるくらいなら、だいたい動くでしょう(たぶん)。
注意点
register_hook メソッド
register_hook 関係は CGI::Application っぽく書き直さないとだめです。
たとえば BEFORE_DISPATCH を使ってたりする場合は、
sub cgiapp_prerun { my $self = shift; $self->SUPER::cgiapp_prerun( @_ ); # 以下、BEFORE_DISPATCH に書いた処理 }
とかする必要があります。
今後の予定(は未定)
- SledgeLike::Template まわりをもうちょっとなんとかする。
- SledgeLike::Charset もあったほうが便利かな?
- SledgeLike::Config は――別にいらないか。
CGI::Application::SledgeLike
――ってパッケージ名にしてたけど、長くて面倒だったので SledgeLike にしました。
とりあえず動く気がします。
細かいところ確認してないけど。Sessionとか。
動作に必要なモジュールは
あたり(だったと思う)。