| DBIx-Class-HTML-FormFu documentation | Contained in the DBIx-Class-HTML-FormFu distribution. |
DBIx::Class::HTML::FormFu - DEPRECATED - use HTML::FormFu::Model::DBIC instead
For new applications, you're advised to use HTML::FormFu::Model::DBIC instead.
# fill a form from the database
my $row = $schema->resultset('Foo')->find($id);
$row->fill_formfu_values( $form )
# populate the database from a submitted form
if ( $form->submitted && !$form->has_errors ) {
my $row = $schema->resultset('Foo')->find({ id => $params->{id} });
$row->populate_from_formfu( $form );
}
The fill_formfu_values and populate_from_formfu functions can both take an optional hasref argument to process the field names from form field name to database fieldname.
The hasref takes to arguments: prefix_col takes a string to add to the begining of the form field names. suffix_col takes a string to add to the end of the form field names.
If you have the following form fields:
private_street
private_city
private_email
office_street
office_city
office_email
You most likely would like to save both datasets in same table:
my $private = $user->new_related( 'data', { type => 'private' } );
$private->populate_from_formfu( $form, { prefix_col => 'private_' } );
my $office = $user->new_related( 'data', { type => 'office' } );
$office->populate_from_formfu( $form, { prefix_col => 'office_' } );
The table needs the following rows:
id (not really needed)
street
city
email
type
user_id
Use $form->add_valid( name => 'value' );
Example:
my $passwd = generate_passwd(); $form->add_valid( passwd => $passwd ); $resultset->populate_from_formfu( $form );
add_valid() works for fieldnames that don't exist in the form.
To ensure your column's inflators and deflators are called, we have to
get / set values using their named methods, and not with get_column /
set_column.
Because of this, beware of having column names which clash with DBIx::Class
built-in method-names, such as delete. - It will have obviously
undesirable results!
Project Page:
http://code.google.com/p/html-formfu/
Mailing list:
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
Mailing list archives:
Please submit bugs / feature requests to http://code.google.com/p/html-formfu/issues/list (preferred) or http://rt.perl.org.
The publicly viewable subversion code repository is at http://html-formfu.googlecode.com/svn/trunk/DBIx-Class-HTML-FormFu.
If you wish to contribute, you'll need a GMAIL email address. Then just ask on the mailing list for commit access.
If you wish to contribute but for some reason really don't want to sign up for a GMAIL account, please post patches to the mailing list (although you'll have to wait for someone to commit them).
If you have commit permissions, use the HTTPS repository url: https://html-formfu.googlecode.com/svn/trunk/DBIx-Class-HTML-FormFu
HTML::FormFu, DBIx::Class, Catalyst::Controller::HTML::FormFu
Carl Franks
Adam Herzog
Daisuke Maki
Mario Minati
Copyright (C) 2007 by Carl Franks
Based on the original source code of DBIx::Class::HTMLWidget, copyright Thomas Klausner.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.
| DBIx-Class-HTML-FormFu documentation | Contained in the DBIx-Class-HTML-FormFu distribution. |
package DBIx::Class::HTML::FormFu; use strict; use warnings; use Carp qw( croak ); our $VERSION = '0.01005'; sub fill_formfu_values { my ( $dbic, $form, $attrs ) = @_; $attrs = { prefix_col => '', suffix_col => '', %{ $attrs || {} } }; my $prefix = $attrs->{prefix_col}; my $suffix = $attrs->{suffix_col}; my $fields; eval { $fields = $form->get_fields; }; croak "require a compatible form object: $@" if $@; for my $field (@$fields) { my $field_name = $field->name; next unless defined $field_name; my ($dbic_name) = ( $field_name =~ /\A(?:$prefix)?(.*)(?:$suffix)?\z/ ); next unless ( $dbic->has_column($dbic_name) || $dbic->result_source->has_relationship($dbic_name) ); if ( $dbic->result_source->has_relationship($dbic_name) && $dbic->result_source->related_source($dbic_name) ->has_column('id') && $dbic->result_source->related_source($dbic_name) ->get_column('id') ) { $field->default( $dbic->result_source->related_source($dbic_name)->id ); } else { $field->default( $dbic->$dbic_name ); } } return $form; } sub populate_from_formfu { my ( $dbic, $form, $attrs ) = @_; $attrs = { prefix_col => '', suffix_col => '', %{ $attrs || {} } }; my %checkbox; eval { %checkbox = map { $_->name => 1 } grep { defined $_->name } @{ $form->get_fields( { type => 'Checkbox' } ) || [] }; }; croak "require a compatible form object: $@" if $@; my $params = $form->params; for my $col ( $dbic->result_source->columns ) { my $col_info = $dbic->column_info($col); my $is_nullable = $col_info->{is_nullable} || 0; my $data_type = $col_info->{data_type} || ''; my $form_col = $attrs->{prefix_col} . $col . $attrs->{suffix_col}; my $value = exists $params->{$form_col} ? $params->{$form_col} : undef; if ( ( $is_nullable || $data_type =~ m/^timestamp|date|int|float|numeric/i ) && defined $value && $value eq '' ) { $value = undef; $dbic->$col($value); } if ( $checkbox{$form_col} && !defined $value && !$is_nullable ) { $dbic->$col( $col_info->{default_value} ); } elsif ( defined $value || $checkbox{$form_col} ) { $dbic->$col($value); } } $dbic->update_or_insert; return $dbic; } 1; __END__