HTML::FormHandler::Moose
및 HTML::FormHandler::Model::DBIC
을 사용하고 멋진 양식을 사용할 수 있습니다. 간단한 예를 들어
:
양식 정의 :
package MyStats::Form::Datetime ;
use HTML::FormHandler::Moose ;
extends 'HTML::FormHandler::Model::DBIC' ;
use Date::Calc qw(Today_and_Now) ;
has_field 'datetimeid' => (label => 'ID') ;
has_field 'datetime' => (type => 'Text',
apply => [ { transform => \&transform_dt } ] ,
deflation => \&deflation_dt ,
required => 1) ;
has_field 'submit' => (type => 'Submit' ,
value => 'Speichern') ;
# These are the fields of the table datetime
sub transform_dt {
my ($dt) = @_ ;
my @d = ($dt =~ m/(\d{1,2})\.(\d{1,2})\.(\d{4})\s+(\d{1,2}):(\d{1,2})/) ;
return sprintf('%04d-%02d-%02d %02d:%02d:00' , @d[2,1,0,3,4]) ;
}
sub deflation_dt {
my ($dt) = @_ ;
my @d = ($dt =~ m/(\d{4})-(\d{2})-(\d{2})\s+(\d{1,2}):(\d{1,2})/) ;
if(! @d) {
@d = Today_and_Now() ;
}
return sprintf('%02d.%02d.%04d %02d:%02d:00' , @d[2,1,0,3,4]) ;
}
1 ;
그리고 컨트롤러의 사용은 :
package MyStats::Controller::Datetime ;
use Moose ;
use namespace::autoclean ;
BEGIN { extends 'Catalyst::Controller' ; }
use MyStats::Form::Datetime ;
has 'form' => (isa => 'MyStats::Form::Datetime' ,
is => 'rw' ,
lazy => 1 ,
default => \&new_datetime_form) ;
sub new_datetime_form {
MyStats::Form::Datetime->new(css_class => 'datetimeform' ,
name => 'datetimeform') ;
}
...
sub add :Local :Args(0) {
my ($self , $ctx) = @_ ;
my $data = $ctx->model('MyStatsDB::Datetime')->new_result({}) ;
$ctx->stash(template => 'datetime/add.tt2' ,
form => $self->form) ;
$ctx->bread_crumb({ name => 'Datum/Zeit eingeben' ,
location => '/datetime/add' }) ;
$ctx->req->param('datetimeid' , undef) if $ctx->req->param('datetimeid') ;
return unless $self->form->process(item => $data ,
params => $ctx->req->params) ;
$ctx->flash(message => 'Neuer Datensatz ' . $data->datetimeid .
' angelegt.' ,
id_add => $data->datetimeid) ;
$ctx->res->redirect($ctx->uri_for('/datetime')) ;
}
...
__PACKAGE__->meta->make_immutable ;
1 ;
잘 작동합니다.
출처
2012-02-29 22:41:56
dgw
관련 항목 : [CatalystX-Resource] (http://search.cpan.org/dist/CatalystX-Resource/) – daxim