簡介
use Mojolicious::Routes;
# Simple route
my $r = Mojolicious::Routes->new;
$r->route('/')->to(controller => 'blog', action => 'welcome');
# More advanced routes
my $blog = $r->under('/blog');
$blog->get('/list')->to('blog#list');
$blog->get('/:id' => [id => qr/\d+/])->to('blog#show', id => 23);
$blog->patch(sub { shift->render(text => 'Go away!', status => 405) });
Mojolicious::Routes是Mojolicious Web框架的核心。
屬性
Mojolicious::Routes 從 Mojolicious::Roures::Route繼承了所有的屬性,并實現(xiàn)以下屬性。
base_classes
my $classes = $r->base_classes;
$r = $r->base_classes(['MyApp::Controller']);
用于識別控制器的基類,默認為Mojolicious::Controller 和Mojo。
cache
my $cache = $r->cache;
$r = $r->cache(Mojo::Cache->new);
路徑緩存,默認為Mojo::Cache對象。
conditions
my $conditions = $r->conditions;
$r = $r->conditions({foo => sub {...}});
包含所有可用的條件。用于有條件的訪問控制器。
hidden
my $hidden = $r->hidden;
$r = $r->hidden(['attr', 'has', 'new']);
指定在路由器中隱藏的控制器屬性和方法,默認為 attr、has、new 和 tap。
namespaces
my $namespaces = $r->namespaces;
$r = $r->namespaces(['MyApp::Controller', 'MyApp']);
命名空間,用于加載控制器的命名空間。
# Add another namespace to load controllers from
push @{$r->namespaces}, 'MyApp::MyController';
shortcuts
my $shortcuts = $r->shortcuts;
$r = $r->shortcuts({foo => sub {...}});
包含所有可用的shortcuts,用于簡寫的指定路由的控制器的方法。
方法
Mojolicious::Routes 從Mojolicious::Routes::Route繼承所有方法,并實現(xiàn)以下方法。
add_condition
$r = $r->add_condition(foo => sub {...});
注冊一個條件。
$r->add_condition(foo => sub {
my ($route, $c, $captures, $arg) = @_;
...
return 1;
});
add_shortcut
$r = $r->add_shortcut(foo => sub {...});
注冊一個shortcut.
$r->add_shortcut(foo => sub {
my ($route, @args) = @_;
...
});
continue
$r->continue(Mojolicious::Controller->new);
繼續(xù)調(diào)度后面的鏈,并在Mojolicious中為每個action觸發(fā)around_action事件。
dispatch
使用match方法匹配路由,并對匹配到的路由調(diào)用continue方法。
hide
$r = $r->hide('foo', 'bar');
在路由中隱藏控制器的屬性和方法。
is_hidden
my $bool = $r->is_hidden('foo');
檢查控制器的一個屬性或方法名是否已經(jīng)在路由器中隱藏了。
lookup
my $route = $r->lookup('foo');
通過Mojolicious::Routes::Route中的find方法按名稱查找路由,并緩存結(jié)果以供將來使用。
match
$r->match(Mojolicious::Controller->new);
使用Mojolicious::Routes::Match對象進行路由匹配。