CGI::ApplicationとCGI::Application::Plugin::TTでPOSTパラメータにアクセスする
CGI::ApplicationでPOSTで受け取ったパラメータを、TTで表示させる時にモタモタしたのでメモ。
CGI::Application::Plugin::TTはtt_process()というメソッドを使って出力させる。
Hoge::App.pm
package Hoge::App; use strict; use base qw (CGI::Application); use CGI::Carp qw(fatalsToBrowser); use CGI::Application::Plugin::TT; sub cgiapp_init { my $self = shift; # TTのディレクトリなどここで設定 $self->tt_config( TEMPLATE_OPTIONS => { INCLUDE_PATH => "./template", }, ); $self->SUPER::cgiapp_init(@_); } sub cgiapp_prerun { my $self = shift; $self->header_props( -charset => "utf-8" ); } 1;
Hoge::Appを継承したHoge::Member.pm (sub setup()など省く)
package Hoge::Member; use strict; use base qw (Hoge::App); sub do_editconf { my $self = shift; my $q = $self->query; my $q_string = $q->query_string; $self->tt_process('conf.tt', { query => $q, q_string => $q_string, }); } 1;
conf.tt
[% USE Dumper %] [% Dumper.dump(query) %] [% Dumper.dump(q_string) %]
Dumpしたconf.ttの出力結果
$VAR1 = bless( { '.parameters' => [ 'name1', 'name2', 'f_size', 'class', 'class_no', 'edit' ], 'use_tempfile' => 1, '.charset' => 'ISO-8859-1', '.fieldnames' => {}, 'param' => { 'class_no' => [ '3' ], 'f_size' => [ '22.5' ], 'name2' => [ '女子' ], 'name1' => [ 'テスト' ], 'class' => [ 'B' ] }, 'escape' => 1 }, 'CGI' ); $VAR1 = 'name1=%E3%83%86%E3%82%B9%E3%83%88;name2=%E5%A5%B3%E5%AD%90;age=22;height=152;class=B;f_size=22.5;class_no=3;
結果 query.param('param名')で取得できる。
conf.tt
## Member.pm内で、conf.ttに渡された$queryの中のparamのvalueを表示 なまえ:[% query.param('name1') | html %] [% query.param('name2') | html %] クラス:[% query.param('class') | html %] クラス番号:[% query.param('class_no') | html %] ## key,value値をそれぞれ表示したい場合は [% FOREACH q IN query.param() %] [% q %] [% query.param(q) %] [% END %] ## IF文とか [% IF query.param('class_no') %] [% query.param('class_no') | html %] 組 [% END %]
追記
tt_processの中で
$params{c} ||= $self;
のようにアプリケーションオブジェクトそのものが c という名前で設定されているので、テンプレート側では
[% c.query.param('name1') | html %]
のように呼び出すこともできるそうです。
id:khashiさんありがとうございます。毎回$qを渡さなくてもよかったんですね^^;
Template::Plugin::FillInFormもすごい便利。
ページを戻ったり再表示した時など、フォームの値を自動で埋めてくれるモジュール。
- 参考リンク
- template-toolkit.org
-
- use Template; 今日のCPANモジュール