in reply to Re: Re: Why CGI::Application?
in thread Why CGI::Application?
package My::Application::Base; use CGI::Application; our @ISA = qw( CGI::Application ); sub setup { # Do basic stuff, including run_modes everyone has, like 'redirect +_login' } sub cgiapp_prerun { # Do $dbh and $user setup, including standard cookie handling } sub print { my $self = shift; my ($display_type, $template_name, @params) = @_; # This is my method. I have to potentially display in a number of +formats. # I use different templating modules to do that, like PDF::Templat +e or # Excel::Template, instead of just HTML::Template. This does that +for me. } -------- package My::Application::Main; use My::Application::Base; our @ISA = qw( My::Application::Base ); sub setup { my $self = shift; $self->run_modes([qw( login validate home logout )]; } sub login { my $self = shift; my ($error) = @_; my %params; $params{ERROR} = $error if defined $error; $self->print( 'html', 'login', %params, ); } sub validate { my $self = shift; if (BAD_LOGIN) { return $self->login($SOME_ERROR); } # Set the cookie up, and possibly a session. Hand this off # to other modules / functions / objects $self->home; } sub home { my $self = shift; $self->print( 'html', 'home', ); } sub logout { my $self = shift; # Destroy the session and the cookie $self->print( 'html', 'logout', ); }
Ok, so far so good. But, we don't have another C::A yet. I personally do my navigation through some header that I've TMPL_INCLUDE'd into all the relevant templates. (All of them, except login and logout.) The header basically has
HOME => main.cgi?mode=home REPORTS => reports.cgi LOGOUT => main.cgi?mode=logout
But, you wanted to see the other C::A. Here ya go:
package My::Application::Reports; use My::Application::Base; our @ISA = qw( My::Application::Base ); sub setup { my $self = shift; $self->runmodes([qw( choose display )]); } sub choose { # Display some method of choosing reports, probably with some auth +orization # checks in there } sub display { # Do the actual display of the report. }
That's it. No handling of cookies, no handling of nothing. In fact, there's absolutely no way the cookies are NOT going to be handled. You can't forget to add it to the top. You can't forget to do standard processing. It's quite ... nice to be able to forget that you have it cause it just works.
------
We are the carpenters and bricklayers of the Information Age.
Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: Re: Re: Why CGI::Application?
by t'mo (Pilgrim) on Jan 14, 2004 at 19:58 UTC | |
by dragonchild (Archbishop) on Jan 14, 2004 at 20:56 UTC | |
Late to the party, Re^4: Why CGI::Application?
by wfsp (Abbot) on Apr 27, 2007 at 10:23 UTC | |
by dragonchild (Archbishop) on May 01, 2007 at 18:22 UTC |