in reply to Question on CGI: Application and Run Modes
I just had a lousy experience with CGI::Application where in order to get our project back on track I wound up ripping out CGI::Application and coding my own ->new(), ->run() and ->cgiapp_init() methods so the rest of the code I had built around CGI::App would work. I lost a day writing those three methods. But I had already lost two trying to work through the errors with CGI::App.
The CGI::App crowd would probably moan were they to see this code, but it works, was delivered in reasonably good time and bypassed some persistent errors I encountered with the CGI::App framework.
My ->run() method uses old fashioned conditionals to determine dispatch. This was written is such a way that if I was ever able to work through the errors with CGI::App, I could swap it in in place of the three methods I wrote.
Perhaps this would be helpful.
-- Hugh
sub run { my $self = shift; my $rm_arg = shift; # || 'RegForm'; # my $reg_id = shift; my ($cfg,$dbh) = $self->cgiapp_init(); my $session = new CGI::Session() or die CGI::Session->errstr; my $reg_id = $session->param("reg_id"); my ($output,$method); my $q = new CGI; my $rm = $q->param('rm') || $rm_arg; ###l4p my $logger = Log::Log4perl->get_logger('RegForm.run'); ###l4p $logger->debug(Dumper(\$self,\$q)); ###l4p $logger->info("\$reg_id is $reg_id and \$rm is $rm."); ((defined ($q->param('_submitted_RegistrantForm'))) || ($rm eq '')) +|| die " DISPAIR \$q->param('_submitted_Registrant Form') is undef \n"; if(defined($q->param('_submitted_RegistrantForm')) && $q->param('_su +bmit') eq "Proceed_to_Meals_and_Housing"){ $rm = "RegistrantNeeds"; } elsif( (defined($q->param('_submitted_RegistrantNeeds'))) && $q->p +aram('_submit') eq "Proceed_to_Checkout"){ $rm = "RegistrantNeeds"; } elsif( (defined($q->param('_submitted_Checkout'))) && $q->param('_ +submit') eq "Recalculate_Invoice"){ $rm = "Checkout"; } elsif( (defined($q->param('_submitted_Checkout'))) && $q->param('_ +submit') eq "Proceed_to_Payment"){ $rm = "Checkout"; ###l4p $logger->info("\$reg_id is $reg_id and \$rm is $rm and we'r +e dispatching to ->payment() run mode."); } my %run_modes = ( 'RegForm' => 'registrant_form', 'RegistrantNeeds' => 'registrant_needs', 'Checkout' => 'checkout', 'Payment' => 'payment', 'Thankyou' => 'thank_you', 'Admin' => 'admin_screen', ); print STDERR "->run() method defined %run_modes.\n"; { no strict 'refs'; $method = $run_modes{$rm}; } (defined($reg_id )) && print STDERR " near the end of run(), \$reg_ +id is $reg_id\n"; (defined($reg_id )) || print STDERR " near the end of run(), \$reg_ +id is undefined\n"; if ($method eq '') { print STDERR " oh NO! undefining \$reg_id !\n"; $method = 'registrant_form'; undef($reg_id); } (defined($method )) || die " OUCH \$method is undefined in ->run()\n +"; (defined($reg_id) || $method eq 'registrant_form') || die("\$reg_id is undefined, but a registrantID is required for runmode: ->$method(). This usually means that an additional tab or window has been opened to this application. Please close all but your newest invocation of this page and try again.\n"); # print STDERR "->run() method about to pass control to $rm.\n"; ###lp4 $logger->info("->run() method about to pass control to $rm.") +; ($output,$reg_id) = $self->$method($cfg,$reg_id); ###l4p $logger->info("->run() method passed control to $rm which has + returned its output for \$reg_id # $reg_id."); # print STDERR "->run() method passed control to $rm which has retur +ned its output for \$reg_id # $reg_id.\n"; $session->param('reg_id',$reg_id); print $session->header(); print $output; print STDERR "->run() method ready to return.\n"; ###l4p $logger->info("->run() method ready to return processing for +$reg_id."); return; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Question on CGI: Application and Run Modes
by jZed (Prior) on Jul 19, 2006 at 03:29 UTC | |
|
Re^2: Question on CGI: Application and Run Modes
by rhesa (Vicar) on Jul 19, 2006 at 03:19 UTC |