Provided by: libdbix-class-htmlwidget-perl_0.16-5_all bug

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.