CGI::Applicationでpost_dispatch
CGI::Applicationで、Sledgeでいうところのpost_dispatch_hogehogeが欲しいなと思ってCGI::ApplicationのPluginのCGI::Application::Plugin::Dispatchをこしらえた。post_dispatch_hogehogeだけではなく、run_modesを設定しなくても、dispatch_hogehogeを書いていくだけで済みます。
↓のような感じです。
package TestApp::PluginDispatch;
use strict;
use base qw(CGI::Application);
use CGI::Application::Plugin::Dispatch;#プラグイン読み込み
sub setup{
my $self = shift;
$self->mode_param(path_info=>1);
$self->start_mode('index');
}
sub dispatch_index{
my $self=shift;
}
sub dispatch_search{
my $self=shift;
#post_dispatch_searchを下で定義しているのでGETの時のみ
}
sub post_dispatch_search{
my $self=shift;
#RUNモードがsearchでPOSTメソッドの時実行
}
run_modesを設定しなくて良いのですこし楽。post_dispatchを呼び出さないのであればどこかに、
$self->post_dispatch(0);
としておく。プラグインの構造としては、init時にcallbackで、run_modesにAUTOLOADを追加してます。
$self->run_modes( 'AUTOLOAD'=>'dispatch' );
CGI::Appは該当するrunモードがなく、AUTOLOADが設定されている場合、AUTOLOADで指定されたメソッドを呼び出します。ここではdispatchメソッドになります。dispatch内では必要あれば「post_dispatch_hoge」、もしくは「dispatch_hoge」を実行します
前回のHTML::Template::Plugin::Dotのサンプルをちょっといじって実装。
検索がpostメソッドになっただけです。getで直接アクセスすると検索が行われません。
ソースはこちら