Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Comment on

( #3333=superdoc: print w/ replies, xml ) Need Help??
Sure. I'll post a condensation of what I'm working on right now. The plan is this - you have a main C::A, where you handle logging in, the home page, and logging out. You also have a C::A that handles how reporting works. Remember - some of your users might not have the authority to run reports, so it's easier to just disallow the whole C::A than it is to disallow certain run-modes.
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.


In reply to Re: Re: Re: Why CGI::Application? by dragonchild
in thread Why CGI::Application? by sdbarker

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • Outside of code tags, you may need to use entities for some characters:
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others exploiting the Monastery: (8)
    As of 2014-10-25 12:44 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      For retirement, I am banking on:










      Results (143 votes), past polls