5 Apache::MVC::Workflow - Describes the progress of a request through Apache::MVC
13 +---- $r->get_request ---+
20 BeerDB::Beer $r->call_authenticate
21 ->authenticate ------------+------------ $r->authenticate
27 $r->model_class->process($r)
32 An application based on C<Apache::MVC> will provide an Apache handler,
33 and eventually deliver a page. This document explains how that happens,
34 and how to influence it. We'll use the C<BeerDB> project as our example.
36 =head2 Initialize class
38 When the first request comes in, the class will call its own
39 C<init> method. This creates a new view object, sets up inheritance
40 relationships between the model classes and their parent, and so on.
44 Once we have initialized, the handler obtains the configuration for your
45 class, and puts it into a new object. We'll call this a request
46 I<object> for the purposes of this document; it will be a new C<BeerDB>
49 =head2 Getting the request
51 Next, the handler calls C<get_request> on the new object to have it
52 store a copy of the C<Apache::Request>. Of course, if you're not using
53 Apache, you might want to subclass this method to return something that
54 looks like an C<Apache::Request> object, and possibly also subclass the
55 next stage too to get more control over what methods are called on your
56 C<A::R>-lookalike. C<get_request> is expected to put the object in the
57 C<ar> slot of the request object.
59 =head2 Handling the URL
61 Typically, the details of the request will be passed in the URL. This is
62 done with the C<parse_location> method, which is expected to populate
63 several slots of the request object. First, C<table> and C<action>
64 should be populated with the name of the table and the action parts of
65 the URL. Any other arguments should be placed in a listref in the
66 C<args> slot, and GET and POST parameters should be arranged into a hash
67 and placed in the C<params> slot.
69 Some people may not like the idea of passing everything around in the
70 URL; this is the method to override for you. Of course, you'll also need
71 to provide your own default templates to construct links using your
74 =head2 Is this an applicable URL?
76 Next, the C<is_applicable> method works out if this is actually
77 something that C<Apache::MVC> should care about - whether the class
78 exists in the application, whether it supports the given action, and so
79 on. This should return an Apache status code; C<OK> if the request
80 should proceed, C<DECLINED> if it should be passed on to the default
81 handlers, or whatever other codes for permissions problems.
83 =head2 Are we allowed to do this?
85 We then look for an appropriate C<authenticate> method to call; first
86 it will try Calling the C<authenticate> method of the model class, or,
87 if that does not exist, the C<authenticate> method on itself. By
88 default, this allows access to everyone for everything. Similarly, this
89 should return an Apache status code.
91 =head2 Find the appropriate objects
93 The C<find_objects> method is called to populate the C<objects> slot of
94 the request object with the appropriate objects from the model class.
96 This takes the right number of arguments off the C<args> slot by
97 examining the attributes of the method in question. Read more about this
98 in L<Apache::MVC::Model::Default>.
100 =head2 Add any additional data to the request
102 The open-ended C<additional_data> method allows any additional fiddling
103 with the request object before it is despatched.
105 =head2 Ask model to take over
107 The C<process> method of the model class is called with the request
108 object, and is expected to perform any actions it needs, and then
109 despatch control to the view.