Thread stehe auf dem Schlauch: Data::FormValidator::Constraints (5 answers)
Opened by Superfrank at 2009-03-17 11:58

Superfrank
 2009-03-17 14:36
#119499 #119499
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Tach
ich habs nun gefunden. Ich habe nicht berücksichtigt, daß ein Test wie validate_test1 nicht

Code (perl): (dl )
1
2
3
sub validate_test{
return(undef);
}


sondern

Code (perl): (dl )
1
2
3
4
5
[code=perl]sub validate_test{
return sub{
return(undef);
}
}


zurückliefern muß, Die Fehlermeldung bezog sich die ganze Zeit auch darauf, und nicht, daß der constraint eine ungültige Funktion beinhaltet.
Auch habe ich den constraint wie den übergebenen Wert benannt. Ich glaub dazu muß ich mir das Kapitel "MULTIPLE CONSTRAINTS" nochmal genauer durchlesen.
Falls jeand damit herumspielen will, hier ein Beispiel mit nicht validem Ergebnis von validate_test1 :

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/perl
use strict;
use warnings;
use Data::FormValidator::Constraints qw(:closures);
use Data::FormValidator;

my %input = (   input1 => 'eins',
                                input2 => 'zwei',
                                input3 => 'drei',
                                input4 => 'vier');


my $results = validate_input(\%input);

print "result=$results\n";
    # Print the name of missing fields
    if ( $results->has_missing ) {
        for my $f ( $results->missing ) {
            print $f, " is missing\n";
        }
    }

    # Print the name of invalid fields
    if ( $results->has_invalid ) {
        for my $f ( $results->invalid ) {
            print $f, " is invalid: ", $results->invalid( $f ), "\n";
            my $array_ref = $results->invalid( $f );
            my @array = @$array_ref;
            foreach(@array){
            print $_ . ' array' . "\n";
            }
        }
    }

    # Print unknown fields
    if ( $results->has_unknown ) {
        for my $f ( $results->unknown ) {
            print $f, " is unknown\n";
        }
    }

    # Print valid fields
    for my $f ( $results->valid() ) {
        print 'valid ' . $f, " =  ", $results->valid( $f ), "\n";
    }



sub validate_input{
my $input_hash_ref = shift;
my $big_test = {
            filters => 'trim',
            required => [qw( input1 input2 input3 input4 )],

            constraint_methods => {
                    input1 => validate_test1( 'exists',
                                                {fields => [qw( input1 ) ]}
                                                ),
                input2 => validate_test2( 'exists',
                                {fields => [qw( input2 ) ]}
                                ),
                input3 => validate_test3( 'exists',
                                {fields     => [qw( input3  ) ]}
                                ),
                input4 => validate_test4( 'exists',
                                                {fields     => [qw( input4  ) ]}
                                                ),
                }
    };

    my $results = Data::FormValidator->check($input_hash_ref, $big_test);
    print "result1=$results\n";
return($results);
}

sub validate_test1{
my ($type,$attrs) = @_;
        return sub {
        my $dfv = shift;

        $dfv->name_this('validate_test1');

        # value of 'prospective_date' parameter
                        my $val = $dfv->get_current_constraint_value();

                        # get other data to refer to
                    my $data = $dfv->get_filtered_data;

        return(undef);
        }
}

sub validate_test2{
my ($type,$attrs) = @_;
        return sub {
        my $dfv = shift;


        $dfv->name_this('validate_test2');

        # value of 'prospective_date' parameter
                        my $val = $dfv->get_current_constraint_value();

                        # get other data to refer to
                    my $data = $dfv->get_filtered_data;

        return(1);
        }
}

sub validate_test3{
my ($type,$attrs) = @_;
        return sub {
        my $dfv = shift;

        $dfv->name_this('validate_test3');

        # value of 'prospective_date' parameter
                        my $val = $dfv->get_current_constraint_value();

                        # get other data to refer to
                    my $data = $dfv->get_filtered_data;

        return(1);
        }
}

sub validate_test4{
my ($type,$attrs) = @_;
        return sub {
        my $dfv = shift;

        $dfv->name_this('validate_test4');

        # value of 'prospective_date' parameter
                        my $val = $dfv->get_current_constraint_value();

                        # get other data to refer to
                    my $data = $dfv->get_filtered_data;

        return(1);
        }
}



Danke für Eure Hilfe!

Frank



edit: anmerken wollte ich noch, daß es Blödsinn ist den Namen des Constraints, also den zu überprüfendne Wert über "fields => [qw( input1 )" zu übergeben, da der ja mit

Code (perl): (dl )
my $val = $dfv->get_current_constraint_value();


ausgelesen werden kann.

Last edited: 2009-03-18 12:10:11 +0100 (CET)

View full thread stehe auf dem Schlauch: Data::FormValidator::Constraints