Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^2: CGI::Application, the cgiapp_prerun mode, and CGI object interaction

by geektron (Curate)
on Oct 16, 2005 at 21:20 UTC ( [id://500634]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to Re: CGI::Application, the cgiapp_prerun mode, and CGI object interaction
in thread CGI::Application, the cgiapp_prerun mode, and CGI object interaction

Guess I didn't step away enough to have it make sense to anyone else....

That said, here's some code:

sub cgiapp_prerun { my $self = shift; my $dbh = $self->{DBH} = $self->param('DBH'); ### let's check for storage; my $previousClass = $self->query->param('this'); my $className = "DataClasses::${previousClass}"; if ( $className->SUPER::can( 'new' ) and $className->SUPER::can( 'store') ) { my $object = $className->new( DBH => $dbh, REQUEST => $request ); ## the needStorage method allows us to ## have multiple "screens" using the same class ## where not all of them store in the DB $object->store() if $object->needStorage(); } } }
and the store() method ...
sub store { my ( $self, %params )_ = @_; ### if insert ... $self->query->param( -name => 'whatever', -value => '123'); $self->param( 'whatever', '123' ); return 1; }
both methods of stashing the value until the runmode is executed failed. as i've understood the calling stack:

CGI::App->new() -> prerun -> setup -> "runmode" -> teardown

so i don't see how something set in one mode wouldn't carry into another, because it's the same "run cycle".

Replies are listed 'Best First'.
Re^3: CGI::Application, the cgiapp_prerun mode, and CGI object interaction
by cees (Curate) on Oct 16, 2005 at 21:58 UTC

    My recommendation would be to start trimming your code down until things start working. The way you are calling $self->param(...) should work fine, and that value should be recoverable from within your runmode.

    I'll ask again, are you sure that code is being executed? Try the following and you will see that your concept should work fine. Just save all of it into one file, and run it from the command line:

    #!/usr/bin/perl { package TestApp; use base qw(CGI::Application); use CGI qw(:standard); sub setup { my $self = shift; $self->run_modes([qw(start)]); } sub cgiapp_prerun { my $self = shift; print STDERR "calling cgiapp_prerun\n"; $self->param( test => 123 ); } sub start { my $self = shift; my $test = $self->param('test'); print STDERR "test: $test\n"; return qq{<html><body><h1>test: $test</h1></body></html>}; } } TestApp->new->run;

    I have one more question for you. Do you have the following line in your code somewhere?

    use CGI qw(:standard);

    If so, then remove it and things will most likely start to work for you.

      I haven't imported CGI. i leave that up to CGI::Application.

      i'm sure the code's being executed, because i've watched the error log, and I see the warnings i've tossed in to check the values.

      i have a feeling it's a problem in my inheritance, but i had to move on to another part of the code to get a little more done on the app.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://500634]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.