package HTML::FormHandler::Field::Text; # ABSTRACT: text field $HTML::FormHandler::Field::Text::VERSION = '0.40068'; use Moose; extends 'HTML::FormHandler::Field'; has 'size' => ( isa => 'Int|Undef', is => 'rw', default => '0' ); has 'maxlength' => ( isa => 'Int|Undef', is => 'rw' ); has 'maxlength_message' => ( isa => 'Str', is => 'rw', default => 'Field should not exceed [quant,_1,character]. You entered [_2]', ); has 'minlength' => ( isa => 'Int|Undef', is => 'rw', default => '0' ); has 'minlength_message' => ( isa => 'Str', is => 'rw', default => 'Field must be at least [quant,_1,character]. You entered [_2]' ); has '+widget' => ( default => 'Text' ); our $class_messages = { 'text_maxlength' => 'Field should not exceed [quant,_1,character]. You entered [_2]', 'text_minlength' => 'Field must be at least [quant,_1,character]. You entered [_2]', 'multiple_values_disallowed' => 'Field must contain a single value', }; sub get_class_messages { my $self = shift; my $messages = { %{ $self->next::method }, %$class_messages, }; $messages->{text_minlength} = $self->minlength_message if $self->minlength_message; $messages->{text_maxlength} = $self->maxlength_message if $self->maxlength_message; return $messages; } sub _inner_validate_field { my $self = shift; # Check for multiple values if ( ref $self->value eq 'ARRAY' ) { return $self->add_error( $self->get_message('multiple_values_disallowed'), ); } } sub validate { my $field = shift; return unless $field->next::method; my $value = $field->value; # Check for max length if ( my $maxlength = $field->maxlength ) { return $field->add_error( $field->get_message('text_maxlength'), $maxlength, length $value, $field->loc_label ) if length $value > $maxlength; } # Check for min length if ( my $minlength = $field->minlength ) { return $field->add_error( $field->get_message('text_minlength'), $minlength, length $value, $field->loc_label ) if length $value < $minlength; } return 1; } __PACKAGE__->meta->make_immutable; use namespace::autoclean; 1; __END__ =pod =encoding UTF-8 =head1 NAME HTML::FormHandler::Field::Text - text field =head1 VERSION version 0.40068 =head1 DESCRIPTION This is a simple text entry field. Widget type is 'text'. =head1 METHODS =head2 size [integer] This is used in constructing HTML. It determines the size of the input field. The 'maxlength' field should be used as a constraint on the size of the field, not this attribute. =head2 minlength [integer] This integer value, if non-zero, defines the minimum number of characters that must be entered. =head2 maxlength [integer] A constraint on the maximum length of the text. =head2 error messages Set error messages (text_minlength, text_maxlength): has_field 'my_text' => ( type => 'Text', messages => { 'text_minlength' => 'Field is too short', 'text_maxlength' => 'Field is too long', } ); =head1 AUTHOR FormHandler Contributors - see HTML::FormHandler =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2017 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut