【问题标题】:mojolicious disable dot placeholder routingmojolicious 禁用点占位符路由
【发布时间】:2016-05-10 08:52:56
【问题描述】:

背景

我有这个路由

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 呈现为slash。我最初定义的路由不再相关,因为现在模式已更改为foo/:bar/:baz


解决方案

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

我尝试将$foo->pattern->placeholder_start('+'); 添加到我的路由中,但模式仍在发生变化,并且再次无关紧要。看起来它不会禁用与我的问题相关的点。

我尝试在 $r 变量上实现模式方法(这是 Mojo 的路由 - $self->routes

底线,我只需要为某些路由或完全禁用点占位符。

谢谢

【问题讨论】:

  • 我不明白。为什么说email@email.com 这样的电子邮件地址有冒号?
  • 对不起,我的意思是点 (.)

标签: perl mojolicious


【解决方案1】:

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

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

【讨论】:

  • 我现在才意识到占位符和自定义模式的概念,我只是没有以正确的方式接近它。谢谢。
  • 当参数可能以点开头时,您可以使用什么?在这种情况下,通配符占位符似乎不起作用
  • 我正在为 Mojolicious::Plugin::OpenAPI 寻求帮助。您在参数定义中添加"x-mojo-placeholder": "#" 以指定宽松的参数。
猜你喜欢
  • 2018-07-27
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 2021-10-28
  • 2023-03-25
  • 2014-10-14
相关资源
最近更新 更多