use Maypole;
use Maypole::Config;
-our @ISA;
-our $VERSION = '2.09';
+our $VERSION = '2.11';
sub import {
- my ( $class, @plugins ) = @_;
+ shift; # not interested in this - we manipulate the caller's @ISA directly
+ my @plugins = @_;
my $caller = caller(0);
my $frontend = 'Apache::MVC' if $ENV{MOD_PERL};
$frontend ||= 'CGI::Maypole';
$frontend->require or die "Loading $frontend frontend failed: $@";
- push @ISA, $frontend;
my $autosetup=0;
+ my $autoinit=0;
my @plugin_modules;
{
foreach (@plugins) {
if (/^\-Setup$/) { $autosetup++; }
+ elsif (/^\-Init$/) { $autoinit++ }
elsif (/^\-Debug(\d*)$/) {
my $d = $1 || 1;
no strict 'refs';
}
}
no strict 'refs';
- push @{"${caller}::ISA"}, @plugin_modules, $class;
+ push @{"${caller}::ISA"}, @plugin_modules, $frontend;
$caller->config(Maypole::Config->new);
$caller->config->masonx({}) if $masonx;
$caller->setup() if $autosetup;
+ $caller->init() if $autosetup && $autoinit;
}
1;
use Maypole::Application qw(Config::YAML);
-You can also set special flags like -Setup and -Debug.
+You can also set special flags like -Setup, -Debug and -Init.
use Maypole::Application qw(-Debug Config::YAML -Setup);
required model config parameters are set in C<MyApp-E<gt>config>. See
L<Maypole::Config> for more information.
+=head2 -Init
+
+ use Maypole::Application qw(-Setup -Init);
+
+is equivalent to
+
+ use Maypole::Application;
+ MyApp->setup;
+ MyApp->init;
+
+Note that the C<-Setup> flag is required for the C<-Init> flag to work.
+
+In persistent environments (e.g. C<mod_perl>), it is useful to call C<init>
+once in the parent server, rather than at the beginning of the first request
+to each child server, in order to share the view code loaded during C<init>.
+Note that you must supply all the config data to your app before calling
+C<setup> and C<init>, probably by using one of the C<Maypole::Plugin::Config::*>
+plugins.
+
=head2 -Debug
use Maypole::Application qw(-Debug);