use Class::CGI
handlers => {
invoice_date => 'My::Date::Handler',
sales_date => 'My::Date::Handler',
};
my $cgi = Class::CGI->new;
my $date = $cgi->param('invoice_date');
my $date = $cgi->param('sales_date');
my $day = $date->day;
Sense the handler is picking the fields on its own it doesn't know which three fields belong where. Instead of having the handler pick fields maybe allow the user to specify fields to send as arguments.
use Class::CGI
handlers => {
invoice_date => ['My::Date::Handler', qw(invoice_month invoice_d
+ay invoice_year)],
sales_date => ['My::Date::Handler', qw(sales_month sales_day sal
+es_year)],
};
my $cgi = Class::CGI->new;
my $date = $cgi->param('invoice_date');
my $date = $cgi->param('sales_date');
my $day = $date->day;
The main class could then grab those params and send the values to the handler so your handler would look like the following
package My::Date::Handler;
use My::Date;
sub new {
my ($class, $cgi, $param) = (shift,shift,shift); #standard
my ($month, $day, $year) = (shift,shift,shift); #extra
return My::Date->new(
month => $month,
day => $day,
year => $year,
);
}
1;
The new method would then be sent the class, the cgi object, and the name of the handler (i.e. invoice_date, sales_date) followed by the values of any parameters listed in its definition.
use Class::CGI
handlers => {
customer_id => 'My::Customer',
referral_id => 'My::Customer',
sales_date => ['My::Date::Handler',
qw(sales_month sales_day sales_year)],
};
my $cgi = Class::CGI->new;
my $sales_date = $cgi->param('sales_date');
my $customer = $cgi->param('customer_id');
my $referrer = $cgi->param('referrar_id');
I think you get the best of all worlds this way. You can have generic classes that validate the field and return it (without hardcoding the fields into the handler). You get handlers that can consume multiple fields in cases where they are known before hand (hardcoded in, like customer_id might expect some other fields in order to build the customer object), and handlers that consume multiple fields but can be passed the params they need so they are flexible. Of course maybe i'm seeing a problem where there isn't one, but date validation definitly needs to be able to be used multiple times on the same page with different fields (or sets of fields).
The module sounds great otherwise...now if you can tie it to HTML::Template, TT and CGI::Application you will have a winner! ;)
|