[Pdx-pm] Class::CGI

Ovid publiustemp-pdxpm at yahoo.com
Fri Apr 7 18:19:46 PDT 2006


Hi all,

A while ago I posted to our Kwiki about an idea I had called
"Class::CGI" (http://portland.pm.org/kwiki/index.cgi?ClassCGI).

I've gone ahead and written an alpha which you can read about at
http://www.perlmonks.org/?node_id=541983

Note that one of my replies covers some changes which I have not
uploaded yet, but in a nutshell, you can do stuff like this:

  use Class::CGI
    handlers => {
      customer => 'Class::CGI::Customer',
      date     => 'My::Date::Handler',
    };

  my $cgi  = Class::CGI->new;
  my $cust = $cgi->param('customer');
  my $date = $cgi->param('date');

  my $name = $cust->name; # look ma, objects!
  my $year = $date->year;

The handlers are ridiculously easy to write and they encapsulate
everything they need to know for building those objects.  In fact,
there may not even be a real "date" param, but just "year", "month" and
"date" fields.  Or maybe there is a "date" param and the handler can
handle either that or the aforementioned fields.  No matter how you set
things up, your end user merely calls $cgi->param('date') and
everything is handled transparently, right down to the data validation
and untainting.

This makes it very easy to provide a handler to all of your scripts and
classes.  Further, using handlers extensively means you're more likely
to use consistent parameter names throughout your site, making your
code more maintainable.

Of course, you can still call $cgi->raw_param('customer') to get the
actual value without driving it through the handler.

You can also set handlers on Class::CGI instances in case you're
working in a persistent environment and you don't want all of your code
to use the same handlers for the same parameters.

Comments, thoughts and suggestions are welcome.

Cheers,
Ovid

-- 
If this message is a response to a question on a mailing list, please send follow up questions to the list.

Web Programming with Perl -- http://users.easystreet.com/ovid/cgi_course/


More information about the Pdx-pm-list mailing list