• Like
  • Save
Mastering CGI::Application
Upcoming SlideShare
Loading in...5
×
 

Mastering CGI::Application

on

  • 25,662 views

 

Statistics

Views

Total Views
25,662
Views on SlideShare
25,648
Embed Views
14

Actions

Likes
0
Downloads
4
Comments
0

2 Embeds 14

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

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Mastering CGI::Application Mastering CGI::Application Presentation Transcript

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