繁体   English   中英

Perl Dancer尾随斜线

[英]Perl Dancer trailing slash

使用Perl Web应用程序框架Dancer,我在URL匹配中使用尾部斜杠存在一些问题。

比方说,我希望匹配以下URL,并带有可选的Id参数:

get '/users/:id?' => sub
{
    #Do something
}

/users/morgan/users/匹配。 虽然/users不会。 哪个看起来不太均匀。 因为我更喜欢,只匹配URL:s而没有斜杠: /users/morgan/users 我怎么做到这一点?

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

get '/users' => \&show_users;
get '/users/:id' => \&show_users;

sub show_users
{
    #Do something
}

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

id将包含/user/ on到可选斜杠的所有内容。

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

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

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

另外,正如Dave Sherohman所提到的,你应该首先用较少的元素排列你的路由,以便首先匹配那些,特别是如果你使用TrailingSlash中间件来强制拖尾斜杠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM