1CGI::Application::PlugiUns:e:rAcCtoinotnrDiibsuptCaeGtdIc:hP:(eA3rp)lplDioccautmieonnt:a:tPiloungin::ActionDispatch(3)
2
3
4

NAME

6       CGI::Application::Plugin::ActionDispatch - Perl extension
7

SYNOPSIS

9         # In "WebApp.pm"...
10         package WebApp;
11
12         use base 'CGI::Application';
13         use CGI::Application::Plugin::ActionDispatch;
14
15         sub do_stuff : Path('do/stuff') { ... }
16         sub do_more_stuff : Regex('^/do/more/stuff\/?$') { ... }
17         sub do_something_else : Regex('do/something/else/(\w+)/(\d+)$') { ... }
18

DESCRIPTION

20       CGI::Application::Plugin::ActionDispatch adds attribute based support
21       for parsing the PATH_INFO of the incoming request. For those who are
22       familiar with Catalyst. The interface works very similar.
23
24       This plugin is plug and play and shouldn't interrupt the default
25       behavior of CGI::Application.
26

CAVEATS

28       Be aware though, this plugin will not likely work with other modules
29       that use attributes.
30
31       This module should work with mod_perl. It however has not be thoroughly
32       tested as such. If you have used it with mod_perl please e-mail me with
33       your experience.
34

METHODS

36       action_args()
37           If using capturing parentheses in a Regex action. The captured
38           values are accessible using this method.
39
40             sub addElement : Regex('add/(\d+)/(\d+)') {
41               my $self = shift;
42               my($column, $row) = $self->action_args();
43               ...
44             }
45
46           The Path action will store everything after the matched path into
47           the action args.
48
49             # http://example.com/state/pa/philadelphia
50             sub find_state_and_city : Path('state/') {
51               my $self = shift;
52               my($state, $city) = $self->action_args();
53                   # $state == pa, $city == philadelphia
54               ...
55             }
56

ACTIONS

58       Regex
59           Regex action is used for regular expression matching against
60           PATH_INFO. If capturing parentheses are used; the matched
61           parameters are accesssible using the action_args() method.
62
63             Regex('^blah/foo');
64
65           The Regex action either matches or it doesn't. There are no secrets
66           to it.
67
68           It is important to note Regex action takes priority. It is assumed
69           if a Path and Regex action both match. The Regex action will take
70           priority, which may not always be the outcome of least suprise, for
71           instance:
72
73           # http://example.com/music/the_clash sub clash :
74           Path('/music/the_clash') {} # This is an exact match, BUT.  sub
75           the_class : Regex('/music/the_clash') {} # This takes priority.
76           Beware.
77
78       Path
79           The Path action is basically a shortcut for a commonly used Regex
80           action.
81
82             # http://example.com/products/movies/2
83             sub show_product : Path('products/') {
84               my $self = shift;
85               my($category, $id) = $self->action_args();
86               ....
87             }
88
89           Is basically the same thing as.
90
91             sub show_product : Regex('^/products/(\w+)/(\d+)') {
92               my $self = shift;
93               my($category, $id) = $self->action_args();
94               ...
95             }
96
97           For those that care, the Path('products/') will be converted to the
98           regular expression "^/products\/?(\/.*)$"; then split('/') is run
99           on the captured value and stored in action_args().
100
101       Runmode
102           This action will take the method name and run a match on that.
103
104           # http://example.com/foobar
105
106           sub foobar : Runmode {}
107
108       Default
109           The default run mode if no match is found. Essentially the
110           equivalent of the start_mode() method.
111
112           sub default_mode : Default {}
113

EXAMPLE

115       In CGI::Application module:
116
117         package WebApp;
118
119         use base 'CGI::Application';
120         use CGI::Application::Plugin::ActionDispatch;
121         use strict;
122
123         sub setup {
124           my $self = shift;
125           self->mode_param('test_rm');
126           $self->run_modes(
127             basic_runmode => 'basic_runmode'
128           );
129         }
130
131         # Regular runmodes should work.
132         sub basic_runmode {
133           my $self = shift
134         }
135
136       The product() runmode will match anything starting with "/products" in
137       the PATH_INFO.
138
139         # http://example.com/myapp.cgi/products/this/is/optional/and/stored/in/action_args/
140         sub product : Path('products/') {
141           my $self = shift;
142           my($category, $product) = $self->action_args();
143         }
144
145       The music() runmode will match anything starting with "/products/music"
146       in the PATH_INFO. The product() runmode also matches "/products/music".
147       However since this runmode matches closer it takes priority over
148       product().
149
150         # http://example.com/myapp.cgi/products/music/product/
151         sub music : Path('products/music/') {
152           my $self = shift;
153           my $product = $self->action_args();
154           ...
155         }
156
157       This beatles() runmode will match ONLY "/product/music/beatles" or
158       "/product/music/beatles/". Regex takes priority over Path so the
159       previous runmodes which match this PATH_INFO are not run.
160
161         # http://example.com/myapp.cgi/products/music/beatles/
162         sub beatles : Regex('^/products/music/beatles\/?')  {
163           my $self = shift;
164           ...
165         }
166

SEE ALSO

168       CGI::Application, CGI::Application::Dispatch
169
170       http://github.com/jaywhy/cgi-application-plugin-actiondispatch
171

AUTHOR

173       Jason Yates, <jaywhy@gmail.com>
174
176       Copyright (C) 2006-2008 by Jason Yates
177
178       This library is free software; you can redistribute it and/or modify it
179       under the same terms as Perl itself, either Perl version 5.8.7 or, at
180       your option, any later version of Perl 5 you may have available.
181
182
183
184perl v5.34.0                      20C2G1I-:0:7A-p2p2lication::Plugin::ActionDispatch(3)
Impressum