Catalyst-Plugin-CRUD
view release on metacpan or search on metacpan
lib/Catalyst/Controller/CRUD.pm view on Meta::CPAN
$self->call_trigger( 'create_check', $c, $hash );
# insert new record
if ( !$c->stash->{create}->{error} and scalar( keys %{$hash} ) ) {
my $model = $c->model( $self->setting($c)->{model} )->create($hash);
$self->call_trigger( 'create_after', $c, $model );
$c->res->redirect( $self->setting($c)->{default} );
}
# prepare create form
else {
$c->stash->{$self->setting($c)->{name}} = $hash;
}
}
# copy record ex) /xxx/create/yyy
elsif ( defined $c->req->args->[0] and $c->req->args->[0] =~ /^\d+$/ ) {
$this->get_model( $c, $self, $c->req->args->[0] );
undef $c->stash->{$self->setting($c)->{name}}->{$self->setting($c)->{primary}};
}
# template setting
my $prefix = $self->setting($c)->{template}->{prefix};
my $suffix = $self->setting($c)->{template}->{suffix} ? $self->setting($c)->{template}->{suffix} : '.tt';
$c->stash->{template} = $prefix . 'create' . $suffix;
}
=head2 read
Read action.
=cut
sub read {
my ( $this, $c, $self ) = @_;
# get model
if ( defined $c->req->args->[0] and $c->req->args->[0] =~ /^\d+$/ ) {
$this->get_model( $c, $self, $c->req->args->[0] );
}
# template setting
my $prefix = $self->setting($c)->{template}->{prefix};
my $suffix = $self->setting($c)->{template}->{suffix} ? $self->setting($c)->{template}->{suffix} : '.tt';
$c->stash->{template} = $prefix . 'read' . $suffix;
}
=head2 update
Update action.
If there is $c->stash->{update}->{error}, then it does not update already recoed.
Triggers:
$self->call_trigger( 'update_check', $c, $hash );
$self->call_trigger( 'update_after', $c, $model );
=cut
sub update {
my ( $this, $c, $self ) = @_;
# update already record
if ( $c->req->param('btn_update') ) {
my $model = $this->get_model( $c, $self, $c->req->param( $self->setting($c)->{primary} ) );
if (defined $model) {
# create hash from request parameters
my $primary = $self->setting($c)->{primary};
my $hash = {$primary => $model->$primary};
foreach (@{ $self->setting($c)->{columns} }) {
my $value = $c->req->param($_);
if (defined $value) {
$hash->{$_} = $value;
}
}
# update check
$self->call_trigger( 'update_check', $c, $hash );
# update already record
if ( !$c->stash->{update}->{error} and scalar( keys %{$hash} ) ) {
foreach (@{ $self->setting($c)->{columns} }) {
my $value = $c->req->param($_);
if (defined $value) {
$model->$_( $value );
}
}
$model->update();
$self->call_trigger( 'update_after', $c, $model );
$c->res->redirect( $self->setting($c)->{default} );
}
# prepare update form
else {
undef $c->stash->{$self->setting($c)->{name}};
$c->stash->{$self->setting($c)->{name}} = $hash;
}
}
}
# prepare update form
elsif ( defined $c->req->args->[0] and $c->req->args->[0] =~ /^\d+$/ ) {
$this->get_model( $c, $self, $c->req->args->[0] );
}
# update error
else {
$c->res->status(404);
$c->res->body("404 Not Found\n");
}
# template setting
my $prefix = $self->setting($c)->{template}->{prefix};
my $suffix = $self->setting($c)->{template}->{suffix} ? $self->setting($c)->{template}->{suffix} : '.tt';
$c->stash->{template} = $prefix . 'update' . $suffix;
}
=head2 delete
Delete action.
( run in 1.261 second using v1.01-cache-2.11-cpan-39bf76dae61 )