From: Sebastian Riedel Date: Mon, 27 Sep 2004 01:23:04 +0000 (+0000) Subject: moved Workflow.pod to the Manual X-Git-Tag: 2.10~153 X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=bf26883dc1ef2013406a5777f60eb007574905f5;p=maypole.git moved Workflow.pod to the Manual git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@209 48953598-375a-da11-a14b-00016c27c3ee --- diff --git a/lib/Maypole/Manual/Workflow.pod b/lib/Maypole/Manual/Workflow.pod new file mode 100644 index 0000000..622d755 --- /dev/null +++ b/lib/Maypole/Manual/Workflow.pod @@ -0,0 +1,200 @@ +=pod + +=head1 NAME + +Maypole::Manual::Workflow - Describes the progress of a request through Maypole + +=head1 SYNOPSIS + + config $h + | + Maypole $r + Apache::Request | + +---- $r->get_request ---+ + $ar | + | + $r->parse_location + | + $r->is_applicable + | + BeerDB::Beer $r->call_authenticate + ->authenticate ------------+------------ $r->authenticate + | + $r->additional_data + | + $r->model_class->process($r) + | + $r->view_object->process($r) + + +=head1 DESCRIPTION + +An application based on C will provide an Apache handler, +and eventually deliver a page. This document explains how that happens, +and how to influence it. We'll use the C project as our example. + +=head2 Initialize class + +When the first request comes in, the class will call its own +C method. This creates a new view object, sets up inheritance +relationships between the model classes and their parent, and so on. + +=head2 Construction + +Once we have initialized, the handler obtains the configuration for your +class, and puts it into a new object. We'll call this a request +I for the purposes of this document; it will be a new C +object. + +=head2 Getting the request + +Next, the handler calls C on the new object to have it +store a copy of the C. Of course, if you're not using +Apache, you might want to subclass this method to return something that +looks like an C object, and possibly also subclass the +next stage too to get more control over what methods are called on your +C-lookalike. C is expected to put the object in the +C slot of the request object. + +=head2 Handling the URL + +Typically, the details of the request will be passed in the URL. This is +done with the C method, which is expected to populate +several slots of the request object. First, C and C +should be populated with the name of the table and the action parts of +the URL. Any other arguments should be placed in a listref in the +C slot, and GET and POST parameters should be arranged into a hash +and placed in the C and C slots, respectively. + +Some people may not like the idea of passing everything around in the +URL; this is the method to override for you. Of course, you'll also need +to provide your own default templates to construct links using your +preferred format. + +=head2 Is this an applicable URL? + +Next, the C method works out if this is actually +something that C should care about - whether the class +exists in the application, whether it supports the given action, and so +on. The action is "supported" if it exists in the model class (or its +ancestors) and is marked with the C<:Exported> attribute; this stops web +users from firing off random subroutines in your code. + +This should return an Apache status code; C if the request should +proceed, C if it should be passed on to the default handlers, +or whatever other codes for permissions problems. + +=head2 Are we allowed to do this? + +We then look for an appropriate C method to call; first +it will try calling the C method of the model class, or, +if that does not exist, the C method on itself. By +default, this allows access to everyone for everything. Similarly, this +should return an Apache status code. + +=head2 Add any additional data to the request + +The open-ended C method allows any additional fiddling +with the request object before it is despatched. Specifically, it allows +you to add to the C slot, which is a hash of arguments to +be added to the template. + +=head2 Ask model for widget set + +Asking the model class to C the current request allows it to do +any work it needs for the given command, and populate the C and +C