Mojolicious подстановочные знаки и вопросительный знак - PullRequest
2 голосов
/ 29 ноября 2011

Подстановочный знак (*), как говорят, соответствует абсолютно всему. Но я боюсь, что это не ...

У меня есть веб-сервис со следующим методом:

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 {

но результат тот же.

Кто-нибудь знает способ обойти это? Или я должен подать это как ошибку?

С уважением, Lorenzo

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);
}

Ответы [ 3 ]

2 голосов
/ 29 ноября 2011

? Page = это не URL.

Его параметр.

Так что здесь никаких ошибоку вас есть 'search' в $ param.И $ page = 1 в тайнике.

1 голос
/ 29 ноября 2011

Параметры запроса не будут в тайнике.

Они находятся в

$ self-> req-> params

Итак

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

Должен позволить вам видеть информацию, которую вы ищете

1 голос
/ 29 ноября 2011

Я думаю Корявин прав, это ожидаемое поведение.Выглядит как «page = 1» как параметр и должен быть в $ stash-> param ('page').См. GET-POST-параметры в :: Lite

Если это не работает, может быть, поможет переименование заполнителя "param" во что-то еще?Может быть, это столкновение имен.

...