table of contents
| CGI::Application::Plugin::ActionDispatch(3pm) | User Contributed Perl Documentation | CGI::Application::Plugin::ActionDispatch(3pm) |
NAME¶
CGI::Application::Plugin::ActionDispatch - Perl extensionSYNOPSIS¶
# In "WebApp.pm"...
package WebApp;
use base 'CGI::Application';
use CGI::Application::Plugin::ActionDispatch;
sub do_stuff : Path('do/stuff') { ... }
sub do_more_stuff : Regex('^/do/more/stuff\/?$') { ... }
sub do_something_else : Regex('do/something/else/(\w+)/(\d+)$') { ... }
DESCRIPTION¶
CGI::Application::Plugin::ActionDispatch adds attribute based support for parsing the PATH_INFO of the incoming request. For those who are familiar with Catalyst. The interface works very similar.This plugin is plug and play and shouldn't interrupt the default behavior of CGI::Application.
CAVEATS¶
Be aware though, this plugin will not likely work with other modules that use attributes.This module should work with mod_perl. It however has not be thoroughly tested as such. If you have used it with mod_perl please e-mail me with your experience.
METHODS¶
- action_args()
- If using capturing parentheses in a Regex action. The captured values are
accessible using this method.
sub addElement : Regex('add/(\d+)/(\d+)') { my $self = shift; my($column, $row) = $self->action_args(); ... }The Path action will store everything after the matched path into the action args.
# http://example.com/state/pa/philadelphia sub find_state_and_city : Path('state/') { my $self = shift; my($state, $city) = $self->action_args(); # $state == pa, $city == philadelphia ... }
ACTIONS¶
- Regex
- Regex action is used for regular expression matching against PATH_INFO. If
capturing parentheses are used; the matched parameters are accesssible
using the action_args() method.
Regex('^blah/foo');The Regex action either matches or it doesn't. There are no secrets to it.
It is important to note Regex action takes priority. It is assumed if a Path and Regex action both match. The Regex action will take priority, which may not always be the outcome of least suprise, for instance:
# http://example.com/music/the_clash sub clash : Path('/music/the_clash') {} # This is an exact match, BUT. sub the_class : Regex('/music/the_clash') {} # This takes priority. Beware.
- Path
- The Path action is basically a shortcut for a commonly used Regex action.
# http://example.com/products/movies/2 sub show_product : Path('products/') { my $self = shift; my($category, $id) = $self->action_args(); .... }
Is basically the same thing as.
sub show_product : Regex('^/products/(\w+)/(\d+)') { my $self = shift; my($category, $id) = $self->action_args(); ... }For those that care, the Path('products/') will be converted to the regular expression "^/products\/?(\/.*)$"; then split('/') is run on the captured value and stored in action_args().
- Runmode
- This action will take the method name and run a match on that.
sub foobar : Runmode {}
- Default
- The default run mode if no match is found. Essentially the equivalent of
the start_mode() method.
sub default_mode : Default {}
EXAMPLE¶
In CGI::Application module: package WebApp;
use base 'CGI::Application';
use CGI::Application::Plugin::ActionDispatch;
use strict;
sub setup {
my $self = shift;
self->mode_param('test_rm');
$self->run_modes(
basic_runmode => 'basic_runmode'
);
}
# Regular runmodes should work.
sub basic_runmode {
my $self = shift
}
The product() runmode will match anything starting with "/products" in the PATH_INFO.
# http://example.com/myapp.cgi/products/this/is/optional/and/stored/in/action_args/ sub product : Path('products/') { my $self = shift; my($category, $product) = $self->action_args(); }
The music() runmode will match anything starting with "/products/music" in the PATH_INFO. The product() runmode also matches "/products/music". However since this runmode matches closer it takes priority over product().
# http://example.com/myapp.cgi/products/music/product/ sub music : Path('products/music/') { my $self = shift; my $product = $self->action_args(); ... }
This beatles() runmode will match ONLY "/product/music/beatles" or "/product/music/beatles/". Regex takes priority over Path so the previous runmodes which match this PATH_INFO are not run.
# http://example.com/myapp.cgi/products/music/beatles/ sub beatles : Regex('^/products/music/beatles\/?') { my $self = shift; ... }
SEE ALSO¶
CGI::Application, CGI::Application::Dispatchhttp://github.com/jaywhy/cgi-application-plugin-actiondispatch
AUTHOR¶
Jason Yates, <jaywhy@gmail.com>COPYRIGHT AND LICENSE¶
Copyright (C) 2006-2008 by Jason YatesThis library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.7 or, at your option, any later version of Perl 5 you may have available.
| 2012-10-22 | perl v5.20.2 |