簡體   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