Добавление дополнительного поля в URL, но избегая этого поля в обработке URL-адресов инфраструктуры Catalyst - PullRequest
1 голос
/ 31 января 2012

Предположим, у меня есть URL

http://www.somesite.com/path/to/catalyst/controller

И я хочу перенаправить его на

http://www.somesite.com/extra-part/path/to/catalyst/controller

Эта дополнительная часть должна быть только в URL, и не должна рассматриваться для URLобработка Catalyst.

Я обнаружил, что мы можем наследовать / переопределять метод prepare_path для этого, но я не мог использовать его должным образом.

Я нашел эту ссылку для этого: Catalyst Wiki

Но все равно нужна помощь.

1 Ответ

1 голос
/ 31 января 2012

Внутри lib/MyApp.pm У меня есть функция prepare_path, которая выглядит следующим образом:

sub prepare_path {
  my $c = shift;

  $c->maybe::next::method( @_ ) ;
  my $base_uri_prefix = $c->config->{base_uri_prefix} ;
  my @path_chunks = split m[/], $c->request->path, -1;

  if (@path_chunks && $path_chunks[0] eq $base_uri_prefix ) {
    shift @path_chunks ;

    # Create modified request path from any remaining path chunks:
    my $path = join( '/' , @path_chunks ) || '/' ;

    # Stuff modified request path back into request:
    $c->request->path( $path ) ;
  } else {
    # Modify the path part of the URI to look as if it had a prefix:
    $c->request->uri->path( "$base_uri_prefix/" . $c->request->path ) ;
  }
}

А в myapp.conf определяется:

base_uri_prefix   extra-part
...