2013-02-18 18 views
5

Sử dụng khung công tác ứng dụng web Perl Dancer, tôi gặp một số vấn đề với dấu gạch chéo trong kết hợp URL.Perl Dancer trailing slash

Nói ví dụ, tôi muốn để phù hợp với URL sau, với tham số tùy chọn Id:

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

Cả /users/morgan/users/ trận đấu. Mặc dù /users sẽ không. Mà không có vẻ rất thống nhất. Vì tôi muốn, chỉ phù hợp với URL: s mà không có dấu gạch chéo sau: /users/morgan/users. Làm thế nào tôi sẽ đạt được điều đó?

Trả lời

7

Cách tiếp cận khác là sử dụng tên phụ - tất cả các ví dụ về mã Dancer có xu hướng sử dụng tên miền ẩn danh, nhưng không có gì phải nói là ẩn danh.

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

sub show_users 
{ 
    #Do something 
} 

Lưu ý rằng, do cách Dancer khớp với tuyến đường, điều này tùy thuộc vào thứ tự và theo kinh nghiệm của tôi, tôi phải liệt kê các tuyến ít yếu tố hơn.

5

id sẽ chứa mọi thứ từ /user/ cho đến khi dấu gạch chéo tùy chọn.

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

Bắt buộc [truyện tranh xkcd] (http://xkcd.com/1171/) :) –