Mojolicious路由(四)
一、路由目的地
在使用Mojolicious::Routes:: route中的“get”等方法启动一条新路由后,还可以使用Mojolicious::Routes:: route中的链接方法“to”以哈希的形式给它指定一个目的地。
# /welcome -> {controller => 'foo', action => 'welcome'}
$r->get('/welcome')->to(controller => 'foo', action => 'welcome');
现在,如果路由与传入的请求匹配,它将使用该散列的内容来尝试寻找适当的代码来生成响应。
二、HTTP方法
对于最常见的HTTP请求方法,已经有了一些快捷方式,比如Mojolicious::Routes::Route中的“post”。为了实现更多的控制,Mojolicious::Routes::Route中的“any”接受一个可选的数组引用,并将任意请求方法作为第一个参数。
# PUT /hello -> undef
# GET /hello -> {controller => 'foo', action => 'hello'}
$r->get('/hello')->to(controller => 'foo', action => 'hello');
# PUT /hello -> {controller => 'foo', action => 'hello'}
$r->put('/hello')->to(controller => 'foo', action => 'hello');
# POST /hello -> {controller => 'foo', action => 'hello'}
$r->post('/hello')->to(controller => 'foo', action => 'hello');
# GET|POST /bye -> {controller => 'foo', action => 'bye'}
$r->any(['GET', 'POST'] => '/bye')->to(controller => 'foo', action => 'bye');
# * /whatever -> {controller => 'foo', action => 'whatever'}
$r->any('/whatever')->to(controller => 'foo', action => 'whatever');
有一个小的例外,HEAD请求被认为与GET相等,但是即使响应存在,内容也不会与响应一起发送。
# GET /test -> {controller => 'bar', action => 'test'}
# HEAD /test -> {controller => 'bar', action => 'test'}
$r->get('/test')->to(controller => 'bar', action => 'test');
还可以使用_method查询参数来覆盖请求方法。这在使用只支持GET和POST的浏览器提交表单时非常有用。
# PUT /stuff -> {controller => 'baz', action => 'stuff'}
# POST /stuff?_method=PUT -> {controller => 'baz', action => 'stuff'}
$r->put('/stuff')->to(controller => 'baz', action => 'stuff');