[Catalyst] Custom constraint subroutines no getting form value using Catalyst::Plugin::FormValidator

kakimoto at tpg.com.au kakimoto at tpg.com.au
Thu Apr 2 06:33:48 GMT 2009


Hi, guys,

  I have been trying to create some custom constraints for my form
attributes. I use Catalyst::Plugin::FormValidator 

when I call my custom subroutine that handles a custom constraint, I
notice it will not get the attribute value.
 I have looked up the docs for 
1) Data::FormValidator::Constraints 
2) Catalyst::Plugin::FormValidator 
and tutorial (Data::FormValidator::Tutorial )

and nothing seems to help.

Looking at the tutorial
(http://search.cpan.org/~purdy/Data-FormValidator-Tutorial-1.61/lib/Data/FormValidator/Tutorial.pm),
I decided to build my own constraint subroutines.


Here's what I refered to in the tute:



--------------- TUTE Extract Start ------------------------
  ...
            'email' => \&my_domain_email(),
  ...
  sub my_domain_email {
    ...
  }
--------------- TUTE Extract End ------------------------

 And this is what I implemented:


--------------- MyApp/Controller/User.pm Extract Start 
----------------------

sub _get_validation_profile
{
    my $required = [
        qq{lc_abn},
        qq{lc_company_name},
        qq{mc_telephone},
        qq{add_postcode},
        qq{add_state},
        qq{add_street},
        qq{add_street_number},
        qq{add_suburb},
        qq{ba_postcode},
        qq{ba_state},
        qq{ba_street},
        qq{ba_street_number},
        qq{ba_suburb},
        qq{lc_login_id},
        qq{lc_password},
    ];

    my $optional = [
        qq{mc_email},
        qq{mc_first_name},
        qq{mc_last_name},
        qq{mc_mobile},
    ];

    my $defaults = {
        qq{add_country} => 'Australia',
        qq{ba_country}  => 'Australia',
    };

    my $constraints= {
        qq{mc_email} => email(),
        qq{lc_abn} => FV_min_length(5),
        qq{mc_telephone} => FV_min_length(9),
        qq{add_postcode} =>gozila::Controller::Shared->FV_postcode,
        qq{add_state} => gozila::Controller::Shared->FV_state,
        qq{add_street} => FV_min_length(5),
        qq{add_street_number} => sub { my $elem = shift; return ( $elem
=~ m{\w+} ? 1 : 0 ); },
        qq{add_suburb} => FV_min_length(2),
        qq{ba_postcode} => gozila::Controller::Shared->FV_postcode,
        qq{ba_state} => gozila::Controller::Shared->FV_state,
        qq{ba_street} => FV_min_length(5),
        qq{ba_street_number} => sub { my $elem = shift; return ( $elem
=~ m{\w+} ? 1 : 0 ); },
        qq{ba_suburb} =>  FV_min_length(2),
        qq{lc_login_id} => FV_min_length(5),
        qq{lc_password} => FV_min_length(5),
    };

    return {
        'required' => $required,
        'optional' => $optional,
        'defaults' => $defaults,
        'constraints'  => $constraints,
    };
}

--------------- MyApp/Controller/User.pm Extract End
------------------------



--------------- MyApp/Controller/Shared.pm Extract Start
--------------------


sub FV_postcode
{
    my ($self, $given_postcode) = @_;

Line: 100    return ( $given_postcode >= 200 ? 1 : 0 );
}

sub FV_state
{
    my ($self, $given_state) = @_;
Line: 106    return ( $given_state =~
m{^(VIC|ACT|NSW|TAS|WA|SA|NT|QLD)$}smx ? 1 : 0 );
}


--------------- MyApp/Controller/Shared.pm Extract End
----------------------




the fault here is that I get the error listed below which means that the
subroutines which I have defined are not getting anything...


Use of uninitialized value in numeric ge (>=) at
/home/kakimoto/projects/myApp/t/../lib/myApp/Controller/Shared.pm line 100.
Use of uninitialized value in pattern match (m//) at
/home/kakimoto/projects/myApp/t/../lib/myApp/Controller/Shared.pm line 106.
Use of uninitialized value in numeric ge (>=) at
/home/kakimoto/projects/myApp/t/../lib/myApp/Controller/Shared.pm line 100.
Use of uninitialized value in pattern match (m//) at
/home/kakimoto/projects/myApp/t/../lib/myApp/Controller/Shared.pm line 106.



Any ideas?

 Thank you:)






More information about the Catalyst mailing list