package BookDB::Form::Field::Book; use HTML::FormHandler::Moose; extends 'HTML::FormHandler::Field::Compound'; has_field 'id' => ( type => 'PrimaryKey', ); has_field 'title' => ( type => 'Text', required => 1, required_message => 'A book must have a title.', label => 'Title', ); has_field 'authors' => ( type => 'Multiple', label => 'Authors', ); has_field 'user_updated' => ( type => 'Boolean' ); # has_many relationship pointing to mapping table has_field 'genres' => ( type => 'Multiple', label => 'Genres', label_column => 'name', ); has_field 'isbn' => ( type => 'Text', label => 'ISBN', unique => 1, ); has_field 'publisher' => ( type => 'Text', label => 'Publisher', ); has_field 'format' => ( type => 'Select', label => 'Format', ); has_field 'year' => ( type => 'Integer', range_start => '1900', range_end => '2020', label => 'Year', ); has_field 'pages' => ( type => 'Integer', label => 'Pages', ); has_field 'comment' => ( type => 'Text', ); has_field submit => ( type => 'Submit', value => 'Update' ); sub validate { my $self = shift; my $year_field = $self->field('year'); $year_field->add_error('Invalid year') if ( ( $year_field->value > 3000 ) || ( $year_field->value < 1600 ) ); } __PACKAGE__->meta->make_immutable; no HTML::FormHandler::Moose; 1;