NAME
Router::PathInfo - PATH_INFO router, based on search trees
DESCRIPTION
Allows balancing PATH_INFO to static and controllers. It has a simple and intuitive interface.
SYNOPSIS
use Router::PathInfo;
# or
use Router::PathInfo as => singletone;
# this allow to call after new: instance, clear_singleton
my $r = Router::PathInfo->new(
static => {
allready => {
path => '/path/to/static',
first_uri_segment => 'static'
}
}
);
$r->add_rule(
connect => '/foo/:enum(bar|baz)/:re(^\d{4}$)/:any',
action => $some_thing,
mthods => ['GET','DELETE'],
match_callback => $code_ref
);
my $env = {PATH_INFO => '/foo/bar/2011/baz', REQUEST_METHOD => 'GET'};
my $res = $r->match($env);
# or
my $res = $r->match('/foo/bar/2011/baz'); # GET by default
# $res = {
# type => 'controller',
# action => $some, # result call $code_ref->($match, $env)
# segment => ['bar','2011','baz']
# }
$env = {PATH_INFO => '/static/img/some.jpg'};
$res = $r->match($env);
# $res = {
# type => 'static',
# file => '/path/to/static/img/some.jpg',
# mime => 'image/jpeg'
# }
See more details Router::PathInfo::Controller, Router::PathInfo::Static
PACKAGE VARIABLES
$Router::PathInfo::as_singleton
Mode as singletone. By default - 0. You can pick up directly, or:
use Router::PathInfo as => singletone;
# or
require Router::PathInfo;
Router::PathInfo->import(as => singletone);
# or
$Router::PathInfo::as_singleton = 1
If you decide to work in singletone mode, raise the flag before the call to new
.
SINGLETON
When you work in a mode singletone, you have access to methods: instance
and clear_singleton
METHODS
new(static => $static)
Constructor. All arguments optsioanlny.
static - it hashref arguments for the constructor Router::PathInfo::Static
add_rule
See add_rule
from Router::PathInfo::Controller
match({PATH_INFO => $path_info, REQUEST_METHOD => 'GET'})
Search match. Initially checked for matches on static, then according to the rules of the controllers. In any event returns hashref coincidence or an error.
Example:
{
type => 'error',
code => 400,
desc => '$env->{PATH_INFO} not defined'
}
{
type => 'error',
code => 404,
desc => sprintf('not found for PATH_INFO = %s with REQUEST_METHOD = %s', $env->{PATH_INFO}, $env->{REQUEST_METHOD})
}
{
type => 'controller',
action => $action,
segment => $array_ref_of_segments
}
{
type => 'static',
file => $serch_file,
mime => $mime_type
}
SOURSE
git@github.com:mrRico/p5-Router-Path-Info.git
SEE ALSO
Router::PathInfo::Static, Router::PathInfo::Controller
AUTHOR
mr.Rico <catamoose at yandex.ru>