FillInFormを扱いやすくしよう

CatalystからFillInFormを使う場合に、扱いにくい部分があったので扱いやすくするためのプラグインを作ってみた。

ちなみにCatalyst::Plugin::FillInForm::ForceUTF8と一緒に使うことを想定してます。

プラグイン名はCatalyst::Plugin::FillInForm::Set

package Catalyst::Plugin::FillInForm::Set;
use strict;
use warnings;
use base qw/Catalyst::Base/;

our $VERSION = '0.01';

sub end : Private {
    my ( $self , $c ) = @_;

    $self->NEXT::end($c);
    if ( $c->stash->{_fillform} ) {
        $c->fillform( $c->stash->{_set_fillform} );
    }
}

sub set_fillform {
    my $c = shift;
    $c->stash->{_fillform} = 1;
    $c->stash->{_set_fillform} = shift if @_;
}

1;

単純明快。これだけ。

MyAppにはこう書く

use Catalyst qw/
    FillInForm::ForceUTF8
    FillInForm::Set
/;

DefaultEndと一緒に使う場合はDefaultEndが一番下に来るようにしとけばOK

use Catalyst qw/
    FillInForm::ForceUTF8
    FillInForm::Set
    DefaultEnd
/;

んで使い方

 sub hoge : Local {
     my ( $self , $c ) = @_;

     if ( $c->form->has_error ) {
         $c->set_fillform;
     }

 }

とか

 sub hoge : Local {
     my ( $self , $c ) = @_;

     if ( $c->session->{hoge_data} ) {
         $c->set_fillform( $c->session->{hoge_data} );
     }

 }

みたいな感じ。

結構便利だったり。