2013-02-18 144 views
5

使用Perl Web應用程序框架舞者,我在URL匹配中使用尾部斜線時遇到了一些問題。Perl Dancer尾部斜槓

說,例如,我想匹配下面的網址,使用可選的Id參數:

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

兩個/users/morgan/users/匹配。雖然/users不會。這看起來不是很統一。因爲我更喜歡,只匹配URL:s而沒有結尾的斜槓: /users/morgan/users。我將如何實現這一目標?

回答

7

另一種方法是使用一個名爲子 - 舞者代碼的所有例子傾向於使用匿名潛艇,但沒有什麼是說,它必須是匿名的。

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

sub show_users 
{ 
    #Do something 
} 

需要注意的是,由於舞者的方式確實路徑一致,這是爲了依賴的,在我的經驗,我已經列出與較少的元素第一的路由。

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

Obligatory [xkcd comic](http://xkcd.com/1171/ :) :) – 2013-02-18 12:57:57