CGI::Application::Dispatch Ver.2以降のテスト
スポンサードリンク
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が動かせるようになったよ!
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2519
コメントする