mojolicious禁用点占位符路由

时间:2016-05-10 08:52:56

标签: perl mojolicious

背景

我有这个路由

my $foo = $r->get('/foo/:asd')->to('Foo#bar');

在控制器中我只是使用传递的参数渲染一些json (在Mojolicious::Controller::REST

的帮助下

$self->data( 'param' => $self->param('asd') );


问题

/foo/bar发送请求时,其工作正常:

{"data":{"param":"bar"}}

但是当我尝试传递包含dot的字符串,例如电子邮件(email@email.com)时,mojo会将dot呈现为{{ 1}}。我在第一时间定义的路由不再相关,因为现在模式已更改为slash


解决方案

我被告知解决方案就在这里: https://github.com/kraih/mojo/blob/master/t/mojolicious/routes.t#L218
这很有意义,但我不明白如何将它与我所拥有的结合起来。

我尝试将foo/:bar/:baz添加到我的路由中,但是,模式正在发生变化,并且它再次无关紧要。它似乎不会禁用与我的问题相关的点。

我尝试在$foo->pattern->placeholder_start('+');变量上实现模式方法(这是Mojo的路由 - $r

最重要的是,我只需要为某些路由禁用点占位符或完全禁用。

由于

1 个答案:

答案 0 :(得分:7)

Mojolicious支持三种占位符参数:

Standard

my $foo = $r->get('/foo/:asd')->to('Foo#bar');

Relaxed

my $foo = $r->get('/foo/#asd')->to('Foo#bar');

Wildcards

my $foo = $r->get('/foo/*asd')->to('Foo#bar');

标准占位符可以匹配除./之外的所有字符。 宽松的占位符可以匹配除/之外的所有字符。 通配符占位符可以匹配所有字符。因此,如果要支持./的参数值,则必须使用宽松或通配符样式的占位符。