2011-11-29 61 views
2

通配符佔位符(*)被稱爲絕對匹配所有內容。 但我恐怕這不...Mojolicious通配符佔位符和問號

我有以下方法webservice的:

get '/*param' => sub { 
    my $self = shift; 
    my $param = $self->stash('param'); 
    $self->app->log->debug($param); 
} 

當我詢問我的服務有:http://localhost:3000/search 那麼方法日誌「搜索」這是確定 但 當我詢問我的服務有:http://localhost:3000/search?page=1 那麼該方法也記錄「搜索」,這是不正常IMO

我也試過更換

get '/*param' => sub { 

get '/:param' => [param => qr/.*/] => sub { 

,但結果是一樣的。

有沒有人知道解決這個問題的方法? 或者我應該把它作爲一個錯誤?

問候, 洛倫佐

UPDATE 人同樣的問題,我解決此問題的工作是這樣的:

get '/*path' => sub { 
    my $self = shift; 
    my $path = $self->stash('path'); 

    my @params = $self->param; 
    if (scalar @params > 0) { 
    $path .= '?'; 
    foreach my $param (@params) { 
     $path .= $param . '=' . $self->param($param) . '&'; 
    } 
    $path = substr($path, 0, length($path) - 1); 
    } 

    $self->app->log->debug($path); 
} 

回答

2

頁=它不是URL。

其參數。

所以這裏沒有任何錯誤。 你有'搜索'在$參數。 而$ page = 1存儲。

+0

你的信息我不是確定我明白你在說Korjavin,但通配符佔位符應該匹配_everything_(根據文檔),而不是。我也確信「?page = 1」部分不在藏品的其他地方。我添加了「$ self-> app-> log-> debug(Dumper $ self> stash);」並且我無法在任何地方找到其餘的網址(即?page = 1)! – ldx

1

我認爲Korjavin是正確的,這是預期的行爲。看起來像「page = 1」作爲參數,應該在$ stash-> param('page')中。見GET-POST-parameters in ::Lite

如果它不起作用,也許重命名「參數」佔位符到別的東西有幫助?也許這是一個名稱衝突。

+0

看來你是對的。我確實在$ self> param中找到'page'。但IMO仍然是一個錯誤。如果文檔聲明通配符匹配(並且我在引用)_絕對是一切_那麼它應該絕對匹配一切! – ldx

+0

是的,文檔現在好多了,但仍然很不完美。猜猜你可以在github上發送補丁請求 –

1

請求參數不在存儲器中。

他們在

$自我> req-> PARAMS

所以

my $params = $self->req->params->to_hash; 
    $self->app->log->debug(Dumper $params); 

應該讓你看後