use strict; use warnings; use Test::More; # test dynamic field ID { package My::DynamicFieldId; use Moose::Role; around 'id' => sub { my $orig = shift; my $self = shift; my $form_name = $self->form->name; return $form_name . "." . $self->full_name; }; } { package My::CustomIdForm; use HTML::FormHandler::Moose; extends 'HTML::FormHandler'; has '+name' => ( default => 'F123' ); has '+html_prefix' => ( default => 1 ); has '+field_traits' => ( default => sub { ['My::DynamicFieldId'] } ); has_field 'foo'; has_field 'bar'; } my $form = My::CustomIdForm->new; is( $form->field('foo')->id, 'F123.foo', 'got correct id' ); # test providing a coderef for field ID building { package MyApp::CustomId; use HTML::FormHandler::Moose; extends 'HTML::FormHandler'; sub build_update_subfields { { all => { build_id_method => \&custom_id } } } has_field 'foo' => ( type => 'Compound' ); has_field 'foo.one'; has_field 'foo.two'; has_field 'foo.three'; sub custom_id { my $self = shift; my $full_name = $self->full_name; $full_name =~ s/\./_/g; return $full_name; } } $form = MyApp::CustomId->new; ok( $form, 'form built' ); is( $form->field('foo.two')->id, 'foo_two', 'got correct id' ); done_testing;