[英]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.