CGI::Application::DispatchとCGI::Application::Plugin::TTを使ってみた

CGI.pmをベースとしたCGIアプリケーションを作成するためのフレームワークCGI::Application::Dispatch。

  • テンプレートの対応
    • HTML::Template,プラグインでTT(Template-Toolkit)にも対応しています。


今回の例ではapp.cgiと./libと./templateというパスが出てきますが、階層はこんな感じ。

/wwwroot
|
|---app.cgi
|---lib/
|    |---Hoge/
|         |---App.pm
|         |---Index.pm
|---template/
     |---index.tt
     |---error.tt


app.cgi

#!/usr/local/bin/perl 
use strict;
use lib qw(./lib);  # モジュールのディレクトリを指定
use CGI::Application::Dispatch;
CGI::Application::Dispatch->dispatch(
    prefix => 'Hoge',
    default  => 'Index',
);


Hoge::App.pm

package Hoge::App;                               
use strict;                                      
use base qw (CGI::Application);                  
use CGI::Application::Plugin::TT;                
                                                                                      
sub cgiapp_init {                                
    my $self = shift;                            
    $self->tt_config(                            
        TEMPLATE_OPTIONS => {                    
            INCLUDE_PATH => "./template",        
        },                                       
    );                                           
}                                                
                                                 
sub cgiapp_prerun {                              
    my $self = shift;                            
    $self->header_props( -charset => "utf-8" );  
}                                                
                                                                                                  
1;                                               


Hoge::Appを継承したHoge::Index.pm

package Hoge::Index;          
use strict;                   
use base qw (Hoge::App);
      
sub setup {                                          
    my $self = shift;                                
    $self->start_mode('index'); #デフォルトページ    
    $self->error_mode('error'); # エラーページ       
                                                     
    # /app.cgi/*で実行
    # /app.cgi/indexだと、do_indexというサブルーチンが実行される  
    $self->run_modes(                                
        index  => 'do_index',                        
        error  => 'do_error',                        
    );                                               
}                                                    
                                                     
sub do_index {                                       
    my $self = shift;                                
    my $q = $self->query;                            
    $self->tt_process('index.tt', { query => $q });  
}                                                    
                                                     
sub do_error {                                       
    my $self = shift;                                
    my $q = $self->query;                            
    $self->tt_process('error.tt', { query => $q });  
}                                                                               

1;


参考サイト

本家のサイト