首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl Dancer尾部斜杠

Perl Dancer尾部斜杠
EN

Stack Overflow用户
提问于 2013-02-18 18:28:36
回答 3查看 649关注 0票数 5

在使用Perl web应用程序框架Dancer时,我在URL匹配中遇到了一些尾部斜杠的问题。

例如,我想用一个可选的Id参数匹配以下URL:

代码语言:javascript
复制
get '/users/:id?' => sub
{
    #Do something
}

/users/morgan/users/都匹配。尽管/users不会。这看起来并不是很统一。因为我更喜欢,只匹配网址:s没有尾部斜杠:/users/morgan/users。我该如何做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-18 21:43:18

另一种方法是使用命名子-所有Dancer代码的示例都倾向于使用匿名subs,但没有什么规定它必须是匿名的。

代码语言:javascript
复制
get '/users' => \&show_users;
get '/users/:id' => \&show_users;

sub show_users
{
    #Do something
}

请注意,由于Dancer进行路由匹配的方式,这是依赖于顺序的,根据我的经验,我必须首先列出元素较少的路由。

票数 8
EN

Stack Overflow用户

发布于 2013-02-18 19:07:50

id将包含从/user/开始的所有内容,直到可选的斜杠。

代码语言:javascript
复制
get qr{^/users/?(?<id>[^/]+)?$} => sub {
  my $captures = captures;
  if ( defined $captures->{id} ) {
    return sprintf 'the id is: %s', $captures->{id};
  }
  else {
    return 'global user page'
  }
};
票数 5
EN

Stack Overflow用户

发布于 2018-11-08 14:28:37

我知道这是一个老问题,但我最近通过使用Plack中间件解决了这个问题。根据您是否喜欢带有尾随斜杠的URL,您可以从其中两个URL中选择:

使用上面的任何中间件都可以极大地简化核心Dancer应用程序代码和单元测试,因为您不需要同时处理这两种情况。

此外,正如Dave Sherohman所提到的,您绝对应该首先安排较少元素的路由,以便首先匹配这些元素,特别是当您使用TrailingSlash中间件强制使用尾部斜杠时。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14934111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档