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にアップしました。