CGI::ApplicationでもCatalyst風にStash
CGI::AppでTropyを作る過程で思いついたプラグイン。
CGI::AppでもCatalystでも同じ感じでアプリが組めたら便利かなと思う。
package CGI::Application::Plugin::Stash;
use strict;
use warnings;
use vars qw($VERSION @EXPORT);
require Exporter;
@EXPORT = qw(stash);
$VERSION = '0.01';
sub import { goto &Exporter::import }
sub stash{
my $self = shift;
# First use? Create new __PARAMS!
$self->{__PARAMS} = {} unless (exists($self->{__PARAMS}));
if (@_) {
my $stash = @_ > 1 ? {@_} : $_[0];
while ( my ( $key, $val ) = each %$stash ) {
$self->{__PARAMS}->{$key} = $val;
}
}
return $self->{__PARAMS};
}
1;
このコードはまだ試していないんだけど、
$self->param('foo','yada');
$self->stash->{foo} = 'yada';
の結果は同じハズ。
あとでCaropyに組込んでみよう。
CGI::Application::Plugin::FormValidator::SimpleもCatalystと同じように使えていい感じです。
Ver.
0.01で気になったvalidatorのSkipについて作者のmiyashita氏にお願いしたところすぐに対応していただきました。さらに便利になりました。ありがとうございます。
[% c.param('entry').title | html %]
ではなく、
[% c.stash.entry.title | html %]
と書ける。微妙にいい感じ。
追記。
CPANにアップしました。