Your SlideShare is downloading. ×
0
CGI::Application::Dispatch 2008/06/03 Hideo Kimura
CGI::Application <ul><li>MyApp/Index.pm </li></ul><ul><li>package MyApp::Index; </li></ul><ul><li>use base qw(CGI::Applica...
CGI::Application の難点 <ul><li>CGI モードで動かすときにいちいち run させる cgi が必要 </li></ul><ul><li>URI が汚い </li></ul><ul><ul><li>/index.cgi...
CGI::Application::Dispatch <ul><li>MyApp/Dispach.pm </li></ul><ul><li>package MyApp::Dispatch; </li></ul><ul><li>use base ...
CGI::Application::Dispatch <ul><li>/index.cgi/index/index – MyApp::Index->index </li></ul><ul><li>/index.cgi/foo/bar – MyA...
Dispatchテーブル <ul><li>sub dispatch_args { </li></ul><ul><li>return { </li></ul><ul><li>prefix  => 'MyApp', </li></ul><ul><l...
Dispatchテーブルボキャブラリ <ul><li>literal </li></ul><ul><ul><li>そのまま URL にマッチング </li></ul></ul><ul><ul><li>admin/ </li></ul></ul>...
Dispatch テーブルトランスレーション <ul><li>module_name – Module::Name </li></ul><ul><li>module-name – ModuleName </li></ul><ul><li>adm...
mod_rewrite で URI を Cool に <ul><li>.htaccess </li></ul><ul><li>RewriteEngine On </li></ul><ul><li>RewriteBase /~hide/cgiap...
Tips <ul><li>PATH_INFO は使わない方がいい </li></ul><ul><li>モジュールの命名規則は計画的に </li></ul><ul><li>start_mode は統一した方がいい </li></ul>
まとめ <ul><li>素の CGI::Application よりは 100 倍まし ( 当社比 ) </li></ul><ul><li>でも階層が深くなるとそれなりに面倒くさくなる </li></ul><ul><li>:app/:rm の束...
ご清聴ありがとうございました <ul><li>m(_ _)m </li></ul>
Upcoming SlideShare
Loading in...5
×

CGI::Application::Dispatch

10,475

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
10,475
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "CGI::Application::Dispatch"

  1. 1. CGI::Application::Dispatch 2008/06/03 Hideo Kimura
  2. 2. CGI::Application <ul><li>MyApp/Index.pm </li></ul><ul><li>package MyApp::Index; </li></ul><ul><li>use base qw(CGI::Application); </li></ul><ul><li>sub setup { </li></ul><ul><li>my $self = shift; </li></ul><ul><li>$self->start_mode(‘index’); </li></ul><ul><li>$self->run_modes( </li></ul><ul><li>‘ index’ => ‘index’; </li></ul><ul><li>} </li></ul><ul><li>sub index {return ‘Hello World’;} </li></ul><ul><li>1; </li></ul><ul><li>index.cgi </li></ul><ul><li>#!/usr/bin/perl </li></ul><ul><li>use MyApp::Index; </li></ul><ul><li>my $app = MyApp::Index->new; </li></ul><ul><li>$app->run; </li></ul>
  3. 3. CGI::Application の難点 <ul><li>CGI モードで動かすときにいちいち run させる cgi が必要 </li></ul><ul><li>URI が汚い </li></ul><ul><ul><li>/index.cgi?rm=index </li></ul></ul><ul><ul><li>/index.cgi/index </li></ul></ul>
  4. 4. CGI::Application::Dispatch <ul><li>MyApp/Dispach.pm </li></ul><ul><li>package MyApp::Dispatch; </li></ul><ul><li>use base qw(CGI::Application::Dispatch); </li></ul><ul><li>sub dispatch_args { </li></ul><ul><li>return { </li></ul><ul><li>prefix => 'MyApp', </li></ul><ul><li>}; </li></ul><ul><li>} </li></ul><ul><li>index.cgi </li></ul><ul><li>#!/usr/bin/perl </li></ul><ul><li>use MyApp::Dispatch; </li></ul><ul><li>MyApp::Dispatch->dispatch; </li></ul>
  5. 5. CGI::Application::Dispatch <ul><li>/index.cgi/index/index – MyApp::Index->index </li></ul><ul><li>/index.cgi/foo/bar – MyApp::Foo->bar </li></ul><ul><li>一つの CGI でディスパッチしてくれる </li></ul>
  6. 6. Dispatchテーブル <ul><li>sub dispatch_args { </li></ul><ul><li>return { </li></ul><ul><li>prefix => 'MyApp', </li></ul><ul><li>table => [ </li></ul><ul><li>'' => { app => ‘Index', rm => ‘index' }, </li></ul><ul><li>':app/:rm' => { }, </li></ul><ul><li>'admin/:app/:rm' => { prefix => 'MyApp::Admin' }, </li></ul><ul><li>‘ news/:id' => { app => ‘News’, rm => ‘index’ }, </li></ul><ul><li>], </li></ul><ul><li>}; </li></ul><ul><li>} </li></ul><ul><li>/index.cgi – MyApp::Index->index </li></ul><ul><li>/index.cgi/foo/bar – MyApp::Foo->bar </li></ul><ul><li>/index.cgi/admin/foo/bar – MyApp::Admin::Foo->bar </li></ul><ul><li>/index.cgi/news/100 – MyApp::News->index($self->param(id => 100)) </li></ul>
  7. 7. Dispatchテーブルボキャブラリ <ul><li>literal </li></ul><ul><ul><li>そのまま URL にマッチング </li></ul></ul><ul><ul><li>admin/ </li></ul></ul><ul><li>variable </li></ul><ul><ul><li>コロンで始まると $self->param にわたる </li></ul></ul><ul><ul><li>:id/ </li></ul></ul><ul><li>特殊な variable </li></ul><ul><ul><li>:app – モジュール名 </li></ul></ul><ul><ul><li>:rm – ランモード </li></ul></ul>
  8. 8. Dispatch テーブルトランスレーション <ul><li>module_name – Module::Name </li></ul><ul><li>module-name – ModuleName </li></ul><ul><li>admin_top-scores – Admin::TopScores </li></ul>
  9. 9. mod_rewrite で URI を Cool に <ul><li>.htaccess </li></ul><ul><li>RewriteEngine On </li></ul><ul><li>RewriteBase /~hide/cgiapp/html </li></ul><ul><li># If an actual file or directory is requested, serve directly </li></ul><ul><li>RewriteCond %{REQUEST_FILENAME} !-f </li></ul><ul><li>RewriteCond %{REQUEST_FILENAME} !-d </li></ul><ul><li># Otherwise, pass everything through to the dispatcher </li></ul><ul><li>RewriteRule ^(.*)$ /~hide/cgiapp/html/index.cgi/$1 [L,QSA] </li></ul><ul><li>/ </li></ul><ul><li>/admin/index </li></ul><ul><li>/news/100 </li></ul>
  10. 10. Tips <ul><li>PATH_INFO は使わない方がいい </li></ul><ul><li>モジュールの命名規則は計画的に </li></ul><ul><li>start_mode は統一した方がいい </li></ul>
  11. 11. まとめ <ul><li>素の CGI::Application よりは 100 倍まし ( 当社比 ) </li></ul><ul><li>でも階層が深くなるとそれなりに面倒くさくなる </li></ul><ul><li>:app/:rm の束縛が強い </li></ul><ul><li>Catalyst は Dispatcher としてはかなり優秀 </li></ul>
  12. 12. ご清聴ありがとうございました <ul><li>m(_ _)m </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×