| HTML-Shakan documentation | Contained in the HTML-Shakan distribution. |
HTML::Shakan::Model::DataModel - Data::Model bindings for Shakan
# in edit form
my $form = HTML::Shakan->new(
model => 'DataModel'
);
my $row = $dm->lookup('any_table', 1);
if ($form->submitted_and_valid) {
$form->model->update( $row );
redirect('/to/anywhere');
} else {
$form->model->fill( $row );
render_template({form => $form, row => $row});
}
# add form
my $form = HTML::Shakan->new(
model => 'DataModel'
);
if ($form->submitted_and_valid) {
$form->model->create( $model, 'user' );
redirect('/to/anywhere');
} else {
$form->model->fill( $row );
render_template({form => $form, row => $row});
}
wrapper class for Data::Model & HTML::Shakan
fill this row to form
insert new row.
update this row
| HTML-Shakan documentation | Contained in the HTML-Shakan distribution. |
package HTML::Shakan::Model::DataModel; use Any::Moose; with 'HTML::Shakan::Role::Model'; sub fill { my ($self, $row) = @_; my $columns = $row->get_columns; while (my ($k, $v) = each %$columns) { $self->form->fillin_params->{$k} = $v; } } sub create { my ($self, $model, $name) = @_; my $row = {}; my $params = $self->form->params(); for my $column ($model->get_schema($name)->column_names) { next unless exists $params->{$column}; $row->{$column} = $params->{$column}; } $model->set($name => $row); } sub update { my ($self, $row) = @_; my $dat = {}; my $params = $self->form->params(); my $columns = $row->get_columns; for my $column (keys %$columns) { next unless exists $params->{$column}; $row->$column($params->{$column}); } $row->update(); } no Any::Moose; __PACKAGE__->meta->make_immutable; __END__