Слэш в жетоне Танцора

Я хотел бы интерпретировать, например, такой запрос:

GET /my/path?foo=bar

как если бы он был на самом деле переписан, например, в

GET /?path=/my/path&foo=bar

Теперь я думал, что смогу добиться этого, используя следующий маршрут, и использовать param('path') вместе с param('foo') и лайки, например:

get '/:path' => sub {
    return printf "...so you want %s, thinking that best foo is %s...",
        param('path'),
        param('foo');
}

но я получаю 404 - Кажется, что :path часть не может содержать косые черты.

Можно ли вообще добиться этого с помощью маршрутов? Или я смотрю в неправильном направлении (я новичок в Dancer)?

1 ответ

Возможно, вы захотите сопоставить маршрут по регулярному выражению вместо токена. Затем совпадения сохраняются в специальном массиве, который можно вернуть по ключевому слову. splat, Ваш path не будут доступны param('path'), хоть.

Код:

get qr{/([^?]*)} => sub {
    my ($path) = splat;
    return printf "...so you want %s, thinking that best foo is %s...",
        $path,
        param('foo');
}
Другие вопросы по тегам