table of contents
DBIx::Class::HTMLWidget(3pm) | User Contributed Perl Documentation | DBIx::Class::HTMLWidget(3pm) |
NAME¶
DBIx::Class::HTMLWidget - Like FromForm but with DBIx::Class and HTML::Widget
SYNOPSIS¶
You'll need a working DBIx::Class setup and some knowledge of HTML::Widget and Catalyst. If you have no idea what I'm talking about, check the (sparse) docs of those modules.
package My::Model::DBIC::Pet; use base 'DBIx::Class'; __PACKAGE__->load_components(qw/HTMLWidget Core/); package My::Controller::Pet; # Catalyst-style # define the widget in a sub (DRY) sub widget_pet { my ($self,$c)=@_; my $w=$c->widget('pet')->method('get'); $w->element('Textfield','name')->label('Name'); $w->element('Textfield','age')->label('Age'); ... return $w; } # this renders an edit form with values filled in from the DB sub edit : Local { my ($self,$c,$id)=@_; # get the object my $item=$c->model('DBIC::Pet')->find($id); $c->stash->{item}=$item; # get the widget my $w=$self->widget_pet($c); $w->action($c->uri_for('do_edit/'.$id)); # fill widget with data from DB $item->fill_widget($w); } sub do_edit : Local { my ($self,$c,$id)=@_; # get the object from DB my $item=$c->model('DBIC::Pet')->find($id); $c->stash->{item}=$item; # get the widget my $w=$self->widget_pet($c); $w->action($c->uri_for('do_edit/'.$id)); # process the form parameters my $result = $w->process($c->req); $c->stash->{'result'}=$result; # if there are no errors save the form values to the object unless ($result->has_errors) { $item->populate_from_widget($result); $c->res->redirect('/users/pet/'.$id); } }
DESCRIPTION¶
Something like Class::DBI::FromForm / Class::DBI::FromCGI but using HTML::Widget for form creation and validation and DBIx::Class as a ORM.
Methods¶
fill_widget
$dbic_object->fill_widget($widget);
Fill the values of a widgets elements with the values of the DBIC object.
populate_from_widget
my $obj=$schema->resultset('pet)->new->populate_from_widget($result); my $item->populate_from_widget($result);
Create or update a DBIx::Class row from a HTML::Widget::Result object
CAEVATS / POSSIBLE PROBLEMS¶
PostgreSQL¶
ERROR: null value in column "private" violates not-null constraint
This is a result of we trying to set a value to undef that should not be. This is typically a problem when you have a column such ass "private boolean not null". We have a special-case for this, and if you set data_type => boolean, is_nullable => 0 in your ResultSource definition, we update the value to 0 before attempting to insert or update
AUTHORS¶
Thomas Klausner, <domm@cpan.org>, http://domm.zsi.at
Marcus Ramberg, <mramberg@cpan.org>
Andreas Marienborg, <omega@palle.net>
CONTRIBUTORS¶
Simon Elliott, <cpan@browsing.co.uk>
Ashley Berlin
Guillermo Sansovic
LICENSE¶
This code is Copyright (c) 2003-2006 Thomas Klausner. All rights reserved.
You may use and distribute this module according to the same terms that Perl is distributed under.
2021-01-25 | perl v5.32.0 |