Mojolicious::Routes

简介

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继承了所有的属性,并实现以下属性。

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继承所有方法,并实现以下方法。

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);

继续调度后面的链,并在Mojolicious中为每个action触发around_action事件。

dispatch

使用match方法匹配路由,并对匹配到的路由调用continue方法。

hide

$r = $r->hide('foo', 'bar');

在路由中隐藏控制器的属性和方法。

is_hidden

my $bool = $r->is_hidden('foo');

检查控制器的一个属性或方法名是否已经在路由器中隐藏了。

lookup

my $route = $r->lookup('foo');

通过Mojolicious::Routes::Route中的find方法按名称查找路由,并缓存结果以供将来使用。

match

$r->match(Mojolicious::Controller->new);

使用Mojolicious::Routes::Match对象进行路由匹配。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 Mojolicious::Routes::Route是Mojolicious::Routes使用的路由窗口。...
    JSON_NULL阅读 2,688评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,384评论 19 139
  • github地址,欢迎大家提交更新。 express() express()用来创建一个Express的程序。ex...
    Programmer客栈阅读 7,468评论 0 1
  • 1. 简介 这篇文章主要的目的是分析理解express的源码,网络上关于源码的分析已经数不胜数,这篇文章准备另辟蹊...
    没事造轮子阅读 5,163评论 0 8
  • 以前的自己没有开窍,迷迷糊糊的,曾有一段时间,那时的自己负能量满满,总是抱怨发牢骚找借口,好像自己周围被这种迷雾...
    刘猫爱虎阅读 1,423评论 0 0