10 shift->{ar} = Apache::Request->new(Apache->request);
15 $self->{path} = $self->{ar}->uri;
16 my $loc = $self->{ar}->location;
17 no warnings 'uninitialized';
18 $self->{path} =~ s/^($loc)?\///;
21 $self->{params} = { $self->{ar}->content };
22 while (my ($key, $value) = each %{$self->{params}}) {
23 $self->{params}{$key} = '' unless defined $value;
25 $self->{query} = { $self->{ar}->args };
30 $r->{ar}->content_type($r->{content_type});
31 $r->{ar}->headers_out->set("Content-Length" => length $r->{output});
32 $r->{ar}->send_http_header;
33 $r->{ar}->print($r->{output});
36 sub get_template_root {
38 $r->{ar}->document_root . "/". $r->{ar}->location;
45 Apache::MVC - Apache front-end to Maypole
50 use base 'Apache::MVC';
51 BeerDB->setup("dbi:mysql:beerdb");
52 BeerDB->config->{uri_base} = "http://your.site/";
53 BeerDB->config->{display_tables} = [qw[beer brewery pub style]];
54 # Now set up your database:
62 Maypole is a Perl web application framework to Java's struts. It is
63 essentially completely abstracted, and so doesn't know anything about
64 how to talk to the outside world. C<Apache::MVC> is a mod_perl based
67 To use it, you need to create a package which represents your entire
68 application. In our example above, this is the C<BeerDB> package.
70 This needs to first inherit from C<Apache::MVC>, and then call setup.
71 This will give your package an Apache-compatible C<handler> subroutine,
72 and then pass any parameters onto the C<setup_database> method of the
73 model class. The default model class for Maypole uses L<Class::DBI> to
74 map a database to classes, but this can be changed by messing with the
75 configuration. (B<Before> calling setup.)
77 Next, you should configure your application through the C<config>
78 method. Configuration parameters at present are:
84 You B<must> specify this; it is the base URI of the application, which
85 will be used to construct links.
89 If you do not want all of the tables in the database to be accessible,
90 then set this to a list of only the ones you want to display
94 List output is paged if you set this to a positive number of rows.
98 You should also set up relationships between your classes, such that,
99 for instance, calling C<brewery> on a C<BeerDB::Beer> object returns an
100 object representing its associated brewery.
102 For a full example, see the included "beer database" application.
106 Create a driver module like the one above.
108 Put the following in your Apache config:
111 SetHandler perl-script
115 Copy the templates found in F<templates/factory> into the
116 F<beer/factory> directory off the web root. When the designers get
117 back to you with custom templates, they are to go in
118 F<beer/custom>. If you need to do override templates on a
119 database-table-by-table basis, put the new template in
122 This will automatically give you C<add>, C<edit>, C<list>, C<view> and
123 C<delete> commands; for instance, a list of breweries, go to
125 http://your.site/beer/brewery/list
127 For more information about how the system works and how to extend it,
132 Simon Cozens, C<simon@cpan.org>
136 You may distribute this code under the same terms as Perl itself.