CGI::Applicationで、セッションオブジェクトをテンプレートエンジンに自動で渡す
スポンサードリンク
CGI::Applicationで、セッションオブジェクトに入れておいたパラメータをそのままテンプレートエンジンに渡すとき、
package TEST;
use strict;
use warnings;
use utf8;
use base 'CGI::Application';
use CGI::Session qw(-ip_match);
use CGI::Application::Plugin::Session;
sub cgiapp_init {
my ($self) = @_;
$self->session_config(
CGI_SESSION_OPTIONS => [
'driver:File',
$self->query,
{ Directory => 'session_dir' },
],
COOKIE_PARAMS => {
-path => '/',
-expires => '+1h',
},
SEND_COOKIE => 1,
);
$self->query->charset('UTF-8');
}
sub setup {
my $self = shift;
$self->start_mode('index');
$self->run_modes(
index => 'index',
);
$self->header_add( -charset => 'UTF-8');
}
sub index {
my $self = shift;
my $s = $self->session;
my $t = $self->load_tmpl( 'index.tmpl' );
$t->param( hoge => 'fuga');
$t->param( $s->param_hashref() );
return $t->output;
}
1;
こんな感じで書くことができます。でも、例えばサイトにログイン中はセッションオブジェクトにユーザIDなどが入ってるなどした場合、各RumModeで毎回$t->param( $s->param_hashref() );を書くのは面倒……
そんな時は、テンプレートエンジンのフックを使ってこうしてみましょう。
package TEST;
use strict;
use warnings;
use utf8;
use base 'CGI::Application';
use CGI::Session qw(-ip_match);
use CGI::Application::Plugin::Session;
sub cgiapp_init {
my ($self) = @_;
$self->session_config(
CGI_SESSION_OPTIONS => [
'driver:File',
$self->query,
{ Directory => 'session_dir' },
],
COOKIE_PARAMS => {
-path => '/',
-expires => '+1h',
},
SEND_COOKIE => 1,
);
$self->query->charset('UTF-8');
$self->add_callback('load_tmpl',\&load_tmpl_callback);
}
sub setup {
my $self = shift;
$self->start_mode('index');
$self->run_modes(
index => 'index',
);
$self->header_add( -charset => 'UTF-8');
}
sub index {
my $self = shift;
my $s = $self->session;
my $t = $self->load_tmpl( 'index.tmpl' );
$t->param( hoge => 'fuga');
return $t->output;
}
sub load_tmpl_callback {
my ($self, $ht_params, $tmpl_params, $tmpl_file) = @_;
my $s = $self->session;
$ht_params->{'die_on_bad_params'} = 0;
# 各RumModeで$t->param( $s->param_hashref() );する代わり
my $s_hashref = $s->param_hashref();
foreach my $key ( keys %$s_hashref ) {
next if $key =~ m/^_/;
next if $key =~ m/access_token/i;
$tmpl_params->{ $key } = $s_hashref->{ $key };
}
return;
}
1;
セッションオブジェクトの中に、テンプレートエンジンに渡してはならないものもあると思うので、ブラックリストを使って排除するのは必要かなあと思います(next if~を羅列する)。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3503





![: Amazon.co.jp: プラスティック・メモリーズ 1【完全生産限定版】(イベントチケット優先販売申込券付) [Blu-ray]](/lists/_9/B00VWX66E8.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 2【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66K2.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 3【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6MV0.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 4【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66IO.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 5【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6Y0E.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 6【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX69D6.jpg)


コメントする