---
name: "DBIx::Class::HTMLWidget"
section: "3pm"
platform: "linux"
package: "libdbix-class-htmlwidget-perl"
version: "0.16-7"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/DBIx::Class::HTMLWidget"
---

# DBIx::Class::HTMLWidget(3pm)

Like FromForm but with DBIx::Class and HTML::Widget

## 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.
