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で直接アクセスすると検索が行われません。
ソースはこちら