mastering cgi::application

11
Mastering CGI::Applica tion 2008/05/12 Hideo Kimura

Upload: hideo-kimura

Post on 17-Jun-2015

44.817 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Mastering CGI::Application

Mastering CGI::Application

2008/05/12Hideo Kimura

Page 2: Mastering CGI::Application

CGI::Application

• CGI::Application クラスを継承してメソッドをオーバーライドしてフックポイントをほげほげして作るフレームワーク

Page 3: Mastering CGI::Application

フックポイントmy %INSTALLED_CALLBACKS = (# hook name package sub

init => { 'CGI::Application' => [ 'cgiapp_init' ] },prerun => { 'CGI::Application' => [ 'cgiapp_prerun' ] },postrun => { 'CGI::Application' => [ 'cgiapp_postrun' ] },teardown => { 'CGI::Application' => [ 'teardown' ] },load_tmpl => { },

error => { },);

sub をオーバーライド実装することによって各フックポイントに登録される

Page 4: Mastering CGI::Application

呼び出し順序new init   (cgiapp_init) setup

run prerun (cgiapp_prerun) [runmode]

( errror (error) if $@ ) postrun (cgiapp_postrun) teardown (teardown)

Page 5: Mastering CGI::Application

コールバックインターフェースsub cgiapp_init { my ( $self, @args ) = @_;}

sub cgiapp_prerun { my ( $self, $rm ) = @_;}

sub cgiapp_postrun { my ( $self, $bodyref ) = @_;}

Page 6: Mastering CGI::Application

コールバックインターフェースの意味

• 意外と自由• ただ perldoc によると

– 設定ファイルの読み込みなんかは init– setup は runmode の設定とテンプレートパス

に使うべき– 認証や runmode の変更は prerun

Page 7: Mastering CGI::Application

Plugin の書き方

• add_callback([hook point], CODEREF)– 既存のフックポイントにコールバックを登録

• new_hook ([hook point])– 新たにフックポイントを追加する

• call_hook([hook point], args)– フックポイントを呼び出す

• Exporter でメソッドを生やす

Page 8: Mastering CGI::Application

Plugin で拡張package CGI::Application::Plugin::MyPlugin;

use vars qw(@EXPORT);

use base ‘Exporter’;

@EXPORT = qw(my_method);

sub import { my $pkg = shift; my $callpkg = caller;

$caller->add_callback(‘init’, ‘my_init’); $caller->new_hookpoint (‘my_hook’);

goto &Exporter::import}

Page 9: Mastering CGI::Application

お勧め Plugin

• CGI::Application::Plugin::Template• CGI::Application::Plugin::Session• CGI::Application::Plugin::ConfigAuto• CGI::Application::Plugin::FillInForm• CGI::Application::Plugin::Redirect• CGI::Application::Plugin::Forward• CGI::Application::Plugin::Stash

Page 10: Mastering CGI::Application

結論• いいとこ

– かなりシンプル (620 行くらい )– Plugin が結構豊富

• だめなとこ– シンプルすぎる = ディスパッチャーとしての機能し

かない– その割にディスパッチが面倒

• CGI::Application::Dispatch とかあるけど、あれを使うくらいなら Catalyst のほうがまし

• 小規模なら CGI::Application 、大規模なら Catalyst

Page 11: Mastering CGI::Application

ご清聴ありがとうございましたm(_ _)m