Mojolicious::Routes::Route

简介

use Mojolicious::Routes::Route;

my $r = Mojolicious::Routes::Route->new;

Mojolicious::Routes::Route是Mojolicious::Routes使用的路由窗口。

属性

children

my $children = $r->children;
$r           = $r->children([Mojolicious::Routes::Route->new]);

当前路由的子路由,用于构建一个嵌套的路由。

inline

my $bool = $r->inline;
$r       = $r->inline($bool);

允许在当前路由器对象中使用 under 方法。

parent

my $parent = $r->parent;
$r         = $r->parent(Mojolicious::Routes::Route->new);

当前路由的父路由,通过是一个Mojolicious::Routes::Route对象。

partial

my $bool = $r->partial;
$r       = $r->partial($bool);

路由没有特定的结束,剩下的字符将被作为path。

pattern

my $pattern = $r->pattern;
$r          = $r->pattern(Mojolicious::Routes::Pattern->new);

当前路由器的模式,默认为Mojolicious::Routes::Pattern对象。

方法

Mojolicious::Routes::Route从Mojo::Base继承了所有的方法,并实现以下方法。

add_child

$r = $r->add_child(Mojolicious::Routes::Route->new);

将一个孩子添加到此路由。被添加的对象如果有父对象,它将自动从其当前父对象中删除。

any

my $route = $r->any;
my $route = $r->any('/:foo');
my $route = $r->any('/:foo' => sub {...});
my $route = $r->any('/:foo' => sub {...} => 'name');
my $route = $r->any('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->any('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->any('/:foo' => (agent => qr/Firefox/) => sub {...});
my $route = $r->any(['GET', 'POST'] => '/:foo' => sub {...});
my $route = $r->any(['GET', 'POST'] => '/:foo' => [foo => qr/\w+/]);

为匹配的所有HTTP请求方法生成Mojolicious::Routes::Routec对象。

# Route with pattern and destination
$r->any('/user')->to('user#whatever');

所有参数都是可选的,但些参数必须以特定的顺序出现。例如两个数组的引用,前一个表示包含的HTTP方法,后面一个用于对点位符的值进行限制。

# Route with HTTP methods, pattern, restrictive placeholders and destination
$r->any(['DELETE', 'PUT'] => '/:foo' => [foo => qr/\w+/])->to('foo#bar');

还有两个字符串参数,前一个指定路由的模式,后一个指定路由的名称。默认情况下模式为/

# Route with pattern, name and destination
$r->any('/:foo' => 'foo_route')->to('foo#bar');

在路由模式和名称之间,可以使用任意数量的key-value来指定路由条件。

# Route with pattern, condition and destination
$r->any('/' => (agent => qr/Firefox/))->to('foo#bar');

hashref用于指定可选的点位符,和其默认值。

# Route with pattern, optional placeholder and destination
$r->any('/:foo' => {foo => 'bar'})->to('foo#bar');

并且可以使用代码引用来指定回调函数,回调函数会被合并到存储默认值的stash中。

# Route with pattern and a closure as destination
$r->any('/:foo' => sub {
  my $c = shift;
  $c->render(text => 'Hello World!');
});

delete

my $route = $r->delete;
my $route = $r->delete('/:foo');
my $route = $r->delete('/:foo' => sub {...});
my $route = $r->delete('/:foo' => sub {...} => 'name');
my $route = $r->delete('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->delete('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->delete('/:foo' => (agent => qr/Firefox/) => sub {...});

为HTTP方法为DELETE的REQUEST生成Mojolicious::Routes::Route对象。除了默认已经确定的HTTP方法为 DELETE不用传递,其他参数与any方法的完全相同。

# Route with destination
$r->delete('/user')->to('user#remove');

detour

$r = $r->detour(action => 'foo');
$r = $r->detour('controller#action');
$r = $r->detour(Mojolicious->new, foo => 'bar');
$r = $r->detour('MyApp', {foo => 'bar'});

设置此路径的默认参数,并允许部分匹配以简化应用的嵌入。使用与to方法相同的参数。

find

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

按名称查找子路由,自定义名称优于自动生成的名称。

get

my $route = $r->get;
my $route = $r->get('/:foo');
my $route = $r->get('/:foo' => sub {...});
my $route = $r->get('/:foo' => sub {...} => 'name');
my $route = $r->get('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->get('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->get('/:foo' => (agent => qr/Firefox/) => sub {...});

为HTTP方法为GET的REQUEST生成Mojolicious::Routes::Route对象。除了默认已经确定的HTTP方法为 GET不用传递,其他参数与any方法的完全相同。

# Route with destination
$r->get('/user')->to('user#show');

has_custom_name

my $bool = $r->has_custom_name;

检查路由是否具有自定义名称。

has_websocket

 my $bool = $r->has_websocket;

检查此路由是否具有WebSocket祖先,并将结果缓存以备将来使用。

is_endpoint

my $bool = $r->is_endpoint;

检查此路由是否为端点路由。没有子路由的路由就是端点路由。

is_websocket

my $bool = $r->is_websocket;

检查此路由是否为WebSocket。

name

my $name = $r->name;
$r       = $r->name('foo');

获取或设置当前路由的名称。默认为基于路由模式自动生成的名称。注:名称current是一个用于指定当前路由的保留字。

options

my $route = $r->options;
my $route = $r->options('/:foo');
my $route = $r->options('/:foo' => sub {...});
my $route = $r->options('/:foo' => sub {...} => 'name');
my $route = $r->options('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->options('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->options('/:foo' => (agent => qr/Firefox/) => sub {...});

为HTTP方法为OPTION的REQUEST生成Mojolicious::Routes::Route对象。除了默认已经确定的HTTP方法为 OPTION不用传递,其他参数与any方法的完全相同。

# Route with destination
$r->options('/user')->to('user#overview');

over

my $over = $r->over;
$r       = $r->over(foo => 1);
$r       = $r->over(foo => 1, bar => {baz => 'yada'});
$r       = $r->over([foo => 1, bar => {baz => 'yada'}]);

激活当前路由的条件。注:这将关闭路由缓存,因为对于条件来说缓存太复杂了。

# Route with condition and destination
$r->get('/foo')->over(host => qr/mojolicious\.org/)->to('foo#bar');

parse

$r = $r->parse('/:action');
$r = $r->parse('/:action', action => qr/\w+/);
$r = $r->parse(format => 0);

patch

my $route = $r->patch;
my $route = $r->patch('/:foo');
my $route = $r->patch('/:foo' => sub {...});
my $route = $r->patch('/:foo' => sub {...} => 'name');
my $route = $r->patch('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->patch('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->patch('/:foo' => (agent => qr/Firefox/) => sub {...});

为HTTP方法为PATCH的REQUEST生成Mojolicious::Routes::Route对象。除了默认已经确定的HTTP方法为 PATCH不用传递,其他参数与any方法的完全相同。

# Route with destination
$r->patch('/user')->to('user#update');

post

my $route = $r->post;
my $route = $r->post('/:foo');
my $route = $r->post('/:foo' => sub {...});
my $route = $r->post('/:foo' => sub {...} => 'name');
my $route = $r->post('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->post('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->post('/:foo' => (agent => qr/Firefox/) => sub {...});

为HTTP方法为POST的REQUEST生成Mojolicious::Routes::Route对象。除了默认已经确定的HTTP方法为 POST不用传递,其他参数与any方法的完全相同。

# Route with destination
$r->post('/user')->to('user#create');

put

my $route = $r->put;
my $route = $r->put('/:foo');
my $route = $r->put('/:foo' => sub {...});
my $route = $r->put('/:foo' => sub {...} => 'name');
my $route = $r->put('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->put('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->put('/:foo' => (agent => qr/Firefox/) => sub {...});

为HTTP方法为PUT的REQUEST生成Mojolicious::Routes::Route对象。除了默认已经确定的HTTP方法为 PUT不用传递,其他参数与any方法的完全相同。

# Route with destination
$r->put('/user')->to('user#replace');

remove

$r = $r->remove;

把当前路由,从父路由中删除。

# Remove route completely
$r->find('foo')->remove;

# Reattach route to new parent
$r->route('/foo')->add_child($r->find('bar')->remove);

render

my $path = $r->render({foo => 'bar'});

将参数渲染到路径中。

root

my $root = $r->root;

将返回一个Mojolicious::Routes对象,当前对象是其后代。

route

my $route = $r->route;
my $route = $r->route('/:action');
my $route = $r->route('/:action', action => qr/\w+/);
my $route = $r->route(format => 0);

用于匹配所有HTTP请求方法的路由生成器,返回一个Mojolicious::Routes::Route对象。

suggested_method

my $method = $r->suggested_method;

建议到达此路由的HTTP方法,GET和POST是首选项。

to

my $defaults = $r->to;
$r           = $r->to(action => 'foo');
$r           = $r->to({action => 'foo'});
$r           = $r->to('controller#action');
$r           = $r->to('controller#action', foo => 'bar');
$r           = $r->to('controller#action', {foo => 'bar'});
$r           = $r->to(Mojolicious->new);
$r           = $r->to(Mojolicious->new, foo => 'bar');
$r           = $r->to(Mojolicious->new, {foo => 'bar'});
$r           = $r->to('MyApp');
$r           = $r->to('MyApp', foo => 'bar');
$r           = $r->to('MyApp', {foo => 'bar'});

设置此路由的默认参数。

to_string

my $str = $r->to_string;

根据当前路径生成字符串表示。

under

my $route = $r->under(sub {...});
my $route = $r->under('/:foo' => sub {...});
my $route = $r->under('/:foo' => {foo => 'bar'});
my $route = $r->under('/:foo' => [foo => qr/\w+/]);
my $route = $r->under('/:foo' => (agent => qr/Firefox/));
my $route = $r->under([format => 0]);

为具有中间目的地的路由生成Mojolicious::Routes::Route对象。除了HTTP方法已经默认为under外,其他参数与any方法完全相同。

# Intermediate destination and prefix shared between two routes
my $auth = $r->under('/user')->to('user#auth');
$auth->get('/show')->to('#show');
$auth->post('/create')->to('#create');

via

my $methods = $r->via;
$r          = $r->via('GET');
$r          = $r->via('GET', 'POST');
$r          = $r->via(['GET', 'POST']);

限制允许此路由处理的HTTP方法,默认为无限制。

websocket

my $route = $r->websocket;
my $route = $r->websocket('/:foo');
my $route = $r->websocket('/:foo' => sub {...});
my $route = $r->websocket('/:foo' => sub {...} => 'name');
my $route = $r->websocket('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->websocket('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->websocket('/:foo' => (agent => qr/Firefox/) => sub {...});

为WebSocket的握手生成Mojolicious::Routes::Route对象。除了设置了websocket标识外,与get方法的参数和工作方式完全相同。

# Route with destination
$r->websocket('/echo')->to('example#echo');

a

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容