Mastering CGI::Application
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
37,397
On Slideshare
37,383
From Embeds
14
Number of Embeds
2

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 14

http://www.slideshare.net 12
http://www.slideee.com 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Mastering CGI::Application 2008/05/12 Hideo Kimura
  • 2. CGI::Application
    • CGI::Application クラスを継承してメソッドをオーバーライドしてフックポイントをほげほげして作るフレームワーク
  • 3. フックポイント
    • 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 をオーバーライド実装することによって各フックポイントに登録される
  • 4. 呼び出し順序
    • new
    • init   (cgiapp_init)
    • setup
    • run
    • prerun (cgiapp_prerun)
    • [runmode]
    • ( errror (error) if $@ )
    • postrun (cgiapp_postrun)
    • teardown (teardown)
  • 5. コールバックインターフェース
    • sub cgiapp_init {
    • my ( $self, @args ) = @_;
    • }
    • sub cgiapp_prerun {
    • my ( $self, $rm ) = @_;
    • }
    • sub cgiapp_postrun {
    • my ( $self, $bodyref ) = @_;
    • }
  • 6. コールバックインターフェースの意味
    • 意外と自由
    • ただ perldoc によると
      • 設定ファイルの読み込みなんかは init
      • setup は runmode の設定とテンプレートパスに使うべき
      • 認証や runmode の変更は prerun
  • 7. Plugin の書き方
    • add_callback([hook point], CODEREF)
      • 既存のフックポイントにコールバックを登録
    • new_hook ([hook point])
      • 新たにフックポイントを追加する
    • call_hook([hook point], args)
      • フックポイントを呼び出す
    • Exporter でメソッドを生やす
  • 8. 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
    • }
  • 9. お勧め 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
  • 10. 結論
    • いいとこ
      • かなりシンプル (620 行くらい )
      • Plugin が結構豊富
    • だめなとこ
      • シンプルすぎる = ディスパッチャーとしての機能しかない
      • その割にディスパッチが面倒
        • CGI::Application::Dispatch とかあるけど、あれを使うくらいなら Catalyst のほうがまし
    • 小規模なら CGI::Application 、大規模なら Catalyst
  • 11. ご清聴ありがとうございました
    • m(_ _)m