M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2008年7月 1日 02:42

CGI::Application::Dispatch Ver.2以降のテスト

このエントリーをはてなブックマークに追加 mixiチェック

CGI::Application::Dispatchを使おうと思って、CGI::Application::Dispatchまとめ : おまえのログ [norainu.net] を参考にしてもさっぱり分からん。分からん1:エラーでよる。分からん2:ディレクトリ構成が分からん。

と言うわけで現在のCGI::Application::Dispatch(2.12)で実際に動くコードができたので、書き留めておく。


/var/www/html/cgiappd/dispatch.cgi

#!/usr/bin/perl
use strict;
use warnings;
use lib qw(./lib);
use CGI::Application::Dispatch;
CGI::Application::Dispatch->dispatch(
  prefix  => 'MyApp',
  default => 'Index',
);

古い解説だと、prefix, default あたりが大文字で書いてあるんですけれども、それじゃあ動かない。書き直そう。

/var/www/html/cgiappd/lib/MyApp.pm

package MyApp;
use strict;
use warnings;
use base 'CGI::Application';
use CGI::Application::Plugin::Forward;
use CGI::Application::Plugin::BrowserDetect;
 
sub cgiapp_init {
    my $self = shift;
    $self->tmpl_path('./template/');
}
 
# CGI実行前フック
sub cgiapp_prerun {
  my $self = shift;
  $self->header_add( -type => 'text/html; charset=UTF-8');
}
 
# CGI出力前フック
sub cgiapp_postrun {
  # WinIE6の時にXML宣言を外す
  my $self = shift;
  my $output_ref = shift;
  my $b = $self->browser;
  if ( ({$self->header_props()}->{'-type'} eq 'text/html') &&
       ( ( $b->windows ) && ( $b->ie ) && ( $b->major < 7 ) ) ) {
    $$output_ref =~s/<\?xml .+\?>\n?//so;
  }
} 
 
 
1;

/var/www/html/cgiappd/lib/MyApp/Index.pm

package MyApp::Index;
use strict;
use warnings;
use base 'MyApp';
sub setup {
  my $self = shift;
  $self->start_mode('index');
  $self->run_modes(
     'index' => \&do_index,
  );
}
sub do_index{
  my $self = shift;
  return << "END_OF_HTML";
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC 
  "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xml:lang="ja" lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <h1>
      hello
    </h1>
    <p>
      hello!
    </p>
  </body>
</html>
END_OF_HTML
}
 
1;

/var/www/html/cgiappd/lib/MyApp/Set.pm

package MyApp::Set;
use strict;
use warnings;
use base 'MyApp';
sub setup {
  my $self = shift;
  $self->start_mode('index');
  $self->run_modes(
     'index' => \&do_index,
  );
}
sub do_index{
  my $self = shift;
  return << "END_OF_HTML";
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC 
  "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xml:lang="ja" lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <h1>
      Set
    </h1>
    <p>
      Set!
    </p>
  </body>
</html>
END_OF_HTML
}
 
1;

Index.pm内のルーチンを実行:

http://labo.dtpwiki.jp/cgiappd/dispatch.cgi
http://labo.dtpwiki.jp/cgiappd/dispatch.cgi/index
http://labo.dtpwiki.jp/cgiappd/dispatch.cgi/Index


Set.pm内のルーチンを実行:

http://labo.dtpwiki.jp/cgiappd/dispatch.cgi/set
http://labo.dtpwiki.jp/cgiappd/dispatch.cgi/Set


CGI::Applicationでやり始めたのが2年くらい前なんだけれども、その時点でCGI::Application::Dispatchが動かなくて、そこだけ飛ばしていろいろ作り始めたんだけれども、やっとCGI::Application::Dispatchが動かせるようになったよ!

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2519

コメントする