On 4/24/06, Ed Pigg <[EMAIL PROTECTED]> wrote:
> Hi list,
>
> I'm trying to get the concept of creating a super class for my
> application and understand what elements need to be included in the
> base application module.
>
> Let's say I want to create a web app called MyApp. My Directory
> structure looks like this ...
>
> /MyApp
> Base.pm
> User.pm
> Inventory.pm
> Other.pm
>
> My Base class would be
>
> package MyApp::Base.pm
> use base 'CGI::Application';
>
> sub cgiapp_init {...};
> sub cgiapp_prerun {...};
> sub _some_common_code {...};
>
> 1;
>
> Then all of my other packages will contain the run modes for that
> module and can call methods from the base class as long as they are
> setup as follows
>
> package MyApp::User.pm;
> use base 'MyApp::Base';
>
> sub cgiapp_init {
> my $self = shift;
> $self->start_mode( 'display_users' );
> $self->tmpl_path( set_template_path_here );
> $self->run_modes( qw/ display_users display_user_form edit_user /);
> ... module specific init items here
> }
>
> sub display_users {...}
> sub display_user_form {...}
> sub edit_user {...}
> 1;
>
> Am I understanding the layout correctly?
Yes, except that in your subclass example, the fact that you create a
new 'cgiapp_init' method will override the 'cgiapp_init' method in
your base class. That means the 'cgiapp_init' method in your base
class will not get executed. That may be desired, but if it is not,
then you can call the 'cgiapp_init' method in the base class directly
by adding the following line to your 'cgiapp_init' method in your
subclass:
$self->SUPER::cgiapp_init(@_);
Cheers,
Cees
---------------------------------------------------------------------
Web Archive: http://www.mail-archive.com/[email protected]/
http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]