diff --git a/lib/HTML/FormHandler/Field.pm b/lib/HTML/FormHandler/Field.pm
index abe646a9..8e95a6ab 100644
--- a/lib/HTML/FormHandler/Field.pm
+++ b/lib/HTML/FormHandler/Field.pm
@@ -128,6 +128,13 @@ has 'value' => (
is => 'rw',
clearer => 'clear_value',
predicate => 'has_value',
+ trigger => sub {
+ my ( $self, $value ) = @_;
+ $self->fif( $self->fif_value($value) )
+ unless ( ( $self->password && $self->password == 1 )
+ || $self->has_fields );
+ return $value;
+ }
);
=head2 parent
@@ -164,6 +171,12 @@ has 'input' => (
is => 'rw',
clearer => 'clear_input',
predicate => 'has_input',
+ trigger => sub {
+ my ( $self, $input ) = @_;
+ $self->fif($input)
+ unless ( $self->password && $self->password == 1 );
+ return $input;
+ }
);
=head2 input_without_param
@@ -189,24 +202,7 @@ input parameters. The normal use would be to access this field from a template:
=cut
-has 'fif' => (
- is => 'rw',
- clearer => 'clear_fif',
- predicate => 'has_fif',
- lazy_build => 1,
-);
-
-sub _build_fif {
- my $self = shift;
- return if( defined $self->password && $self->password == 1 );
- if( defined $self->input ){
- return $self->input;
- }
- if( defined $self->value ){
- return $self->value;
- }
- return;
-}
+has 'fif' => ( is => 'rw', clearer => 'clear_fif', predicate => 'has_fif' );
=head2 accessor
@@ -885,7 +881,7 @@ sub process
$field->_apply_actions;
-# $field->_build_fif if $field->can('_build_fif');
+ $field->_build_fif if $field->can('_build_fif');
return if $field->has_errors;
return unless $field->validate;
return unless $field->test_ranges;
diff --git a/lib/HTML/FormHandler/Model/DBIC.pm b/lib/HTML/FormHandler/Model/DBIC.pm
index 0087f2a0..df990194 100644
--- a/lib/HTML/FormHandler/Model/DBIC.pm
+++ b/lib/HTML/FormHandler/Model/DBIC.pm
@@ -437,7 +437,6 @@ sub init_value
}
$field->init_value($value);
$field->value($value);
- $field->fif($value);
}
sub _fix_value
diff --git a/t/fif.t b/t/fif.t
index 8fa8fa50..35ecf5fe 100644
--- a/t/fif.t
+++ b/t/fif.t
@@ -66,9 +66,7 @@ ok( !$form->field('author')->has_input, 'no input for field');
$form->clear_state;
ok( !$form->fif, 'clear_state clears fif' );
-warn $form->field('author')->value;
-warn $form->field('author')->input;
-warn Dumper( $form->fif ); use Data::Dumper;
+
my $params = {
title => 'Testing form',
@@ -77,6 +75,7 @@ my $params = {
author => 'J.Doe',
publisher => '',
};
+
$form = BookDB::Form::Book->new(item => $book, schema => $schema, params => $params);
$validated = $form->validate( $params );
diff --git a/t/filters.t b/t/filters.t
index 1483bcfb..4d15d1df 100644
--- a/t/filters.t
+++ b/t/filters.t
@@ -109,7 +109,7 @@ is( ref $form->field('date_coercion_pass')->value, 'DateTime', 'values coerced
ok( $form->field('date_coercion_error')->has_errors, 'DateTime coercion error' );
my ( $message ) = $form->field('date_coercion_error')->errors;
is( $message, 'This is not a correct date', 'Error message for coercion' );
-#$params->{coerce_pass} = '10';
-#$params->{sprintf_filter} = '<1e+02>';
+$params->{coerce_pass} = '10';
+$params->{sprintf_filter} = '<1e+02>';
is_deeply( $form->fif, $params, 'fif is correct' );
diff --git a/t/password.t b/t/password.t
index ef467c77..5ff4954d 100644
--- a/t/password.t
+++ b/t/password.t
@@ -29,12 +29,11 @@ is( $field->password, undef, 'password is not set');
$field->value('abcdef');
is( $field->value, 'abcdef', 'set and get value' );
+
is( $field->fif, 'abcdef', 'get fif');
-$field->clear_fif;
$field->value(undef);
is( $field->fif, undef, 'get undef fif' );
-$field->clear_fif;
$field->input('xyz');
is( $field->fif, 'xyz', 'get fif from input');