| HTML-Shakan documentation | Contained in the HTML-Shakan distribution. |
HTML::Shakan::Field - base class for field object
This is a base class for filed object.
the 'id' attribute for the html elements.
the 'name' attribute for the html elements.
the 'value' attribute for the html elements.
This is parameter filters in arrayref.
For example, following field removes white space from parameter value in head and end.
TextField( name => 'f', required => 1, filters => [qw'WhiteSpace'] ),
type of widget.
hashref about the miscellaneous attributes.
label for this field.
is this field's value required?
TextField(
name => 'id',
custom_validation => sub {
my ($form, $field) = @_;
if (is_reserved_id($form->param($field->name))) {
$form->set_error($field->name() => 'reserved');
}
}
)
You can register custom validation callback.
The callback function takes two arguments.
This is a instance of HTML::Shakan. You can take query parameter value by this object.
The field object itself.
constraints for FormValidator::Lite.
tokuhirom
| HTML-Shakan documentation | Contained in the HTML-Shakan distribution. |
package HTML::Shakan::Field; use Any::Moose; use HTML::Shakan::Utils; has id => ( is => 'rw', isa => 'Str', trigger => sub { my ($self, $id) = @_; $self->{attr}->{id} = $id; }, ); has name => ( is => 'ro', isa => 'Str', required => 1, trigger => sub { my ( $self, $name ) = @_; $self->{attr}->{name} = $name; }, ); has value => ( is => 'rw', isa => 'Str', required => 0, trigger => sub { my ( $self, $value ) = @_; $self->{attr}->{value} = $value; }, ); has filters => ( is => 'rw', isa => 'ArrayRef[Str]', default => sub { +[] } ); has widget => ( is => 'ro', isa => 'Str', required => 1, ); has attr => ( is => 'ro', isa => 'HashRef', lazy => 1, default => sub { +{} }, ); has label => ( is => 'ro', isa => 'Str', lazy => 1, default => sub { shift->name } ); has required => ( is => 'ro', isa => 'Bool', default => 0, ); has inflator => ( is => 'ro', isa => 'Object', ); has custom_validation => ( is => 'ro', isa => 'CodeRef', ); has constraints => ( is => 'ro', isa => 'ArrayRef', default => sub { +[] }, ); sub add_constraint { my ($self, @constraint) = @_; push @{$self->{constraints}}, @constraint; $self; # method chain } has complex_constraints => ( is => 'ro', isa => 'ArrayRef', default => sub { +[] }, ); sub add_complex_constraint { my ($self, @constraints) = @_; push @{$self->{complex_constraints}}, @constraints; $self; # method chain } sub get_constraints { my $self = shift; my @rule = @{$self->{constraints}}; if ($self->required) { push @rule, 'NOT_NULL'; } return ( $self->name => \@rule, @{ $self->complex_constraints }, ); } no Any::Moose; __PACKAGE__->meta->make_immutable; __END__