Perl Dancer尾随斜线

Mor*_*son 5 perl dancer

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

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

get '/users/:id?' => sub
{
    #Do something
}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*man 8

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

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

sub show_users
{
    #Do something
}
Run Code Online (Sandbox Code Playgroud)

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


bur*_*rsk 5

id将包含从/user/开到可选斜杠的所有内容.

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'
  }
};
Run Code Online (Sandbox Code Playgroud)