The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

BEGIN {
use Moose;
}
has 'user_form' => ( isa => 'BookDB::Form::User', is => 'rw',
lazy => 1, default => sub { BookDB::Form::User->new } );
=head1 NAME
BookDB::Controller::User
=head1 SYNOPSIS
An example of a non-database form
=head1 DESCRIPTION
User Controller
=cut
sub user_base : Chained PathPart('user') CaptureArgs(0)
{
my ( $self, $c ) = @_;
}
sub default : Chained('user_base') PathPart('') Args
{
my ( $self, $c ) = @_;
return $self->do_list($c);
}
sub list : Chained('user_base') PathPart('list') Args(0)
{
my ( $self, $c ) = @_;
return $self->do_list($c);
}
sub do_list
{
my ( $self, $c ) = @_;
my $users = $c->model('DB::User');
$c->stash( users => $users, template => 'user/list.tt' );
}
sub create : Chained('user_base') PathPart('create') Args(0)
{
my ( $self, $c ) = @_;
# Create the empty user row for the form
$c->stash( user => $c->model('DB::User')->new_result({}) );
return $self->form($c);
}
sub item : Chained('user_base') PathPart('') CaptureArgs(1)
{
my ( $self, $c, $user_id ) = @_;
$c->stash( user => $c->model('DB::User')->find($user_id) );
}
sub edit : Chained('item') PathPart('edit') Args(0)
{
my ( $self, $c ) = @_;
return $self->form($c);
}
sub form
{
my ( $self, $c ) = @_;
my $user = $c->stash->{user};
$c->stash( form => $self->user_form, template => 'user/form.tt',
action => $c->chained_uri_for->as_string );
# this is quite silly... Taking the data from the database
# and storing it again outside of FormHandler
# but it demonstrates the use of a non-db form
my $user_hashref = {
user_name => $user->user_name,
fav_cat => $user->fav_cat,
fav_book => $user->fav_book,
occupation => $user->occupation };
$self->user_form->validate(
init_object => $user_hashref,
params => $c->req->parameters );
return unless $self->user_form->validated;
my $result = $self->user_form->values;
$user->set_columns($result);
$user->update_or_insert;
$c->res->redirect( $c->uri_for('list') );
}
sub delete : Chained('item') PathPart('delete') Args(0)
{
my ( $self, $c ) = @_;
$c->stash->{user}->delete;
$c->res->redirect( $c->uri_for('list') );
}
sub view : Chained('item') PathPart('') Args(0) { }
=back
=head1 AUTHOR
Gerda Shank
=head1 LICENSE
This library is free software . You can redistribute it and/or modify
it under the same terms as perl itself.
=cut
1;