The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

use Moose;
has callback => ( is => 'rw', traits => ['Chained'] );
sub process {
my ( $self, $params ) = @_;
# check when condition
return if !$self->_process_when($params);
my $value = $self->get_nested_hash_value( $params, $self->nested_name );
my $callback = $self->callback || sub {1};
no strict 'refs';
my $ok = eval { $callback->( $value, $params ) };
return $self->mk_errors( {
pass => ( $@ or !$ok ) ? 0 : 1,
message => $@,
} );
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=head1 NAME
HTML::FormFu::Constraint::CallbackOnce - Code Callback Constraint
=head1 SYNOPSIS
$form->constraint({
type => 'CallbackOnce',
name => 'foo',
callback => \&sfoo,
);
sub foo {
my ( $value, $params ) = @_;
# return true or false
}
=head1 DESCRIPTION
Unlinke the L<HTML::FormFu::Constraint::Callback>, this callback is only
called once, regardless of how many values are submitted.
The first argument passed to the callback is the submitted value for the
associated field; this may be a single value or an arrayref of value.
The second argument passed to the callback is a hashref of name/value pairs
for all input fields.
This constraint doesn't honour the C<not()> value.
=head1 METHODS
=head2 callback
Arguments: \&sub_ref
=head1 SEE ALSO
Is a sub-class of, and inherits methods from L<HTML::FormFu::Constraint>
L<HTML::FormFu>
=head1 AUTHOR
Carl Franks C<cfranks@cpan.org>
=head1 LICENSE
This library is free software, you can redistribute it and/or modify it under
the same terms as Perl itself.
=cut