«Динамичные» маршруты в Mojolicious - PullRequest
7 голосов
/ 05 мая 2011

Я хотел бы реализовать что-то вроде «динамических» маршрутов в моем приложении Mojolicious. У меня есть несколько предопределенных «статических» маршрутов и таблица БД с псевдонимами URL: «/ alias» -> «/ URL». Теперь я определяю маршруты на лету, и это выглядит так:

before_dispatch => sub { 
  my ($self, $controller) = @_; 
  my $path = $controller->tx->req->url->path->to_string; 
  if ( my $alias = $controller->app->model->alias->find({ alias => $path }) ) { 
    my $match = Mojolicious::Routes::Match->new( get => $alias->{uri} ); 
    my $routes = $controller->app->routes; 
    $match->match( $routes ); 
    $routes->route( $path )->to( $match->captures ); 
  } 

Но есть ли лучший способ?

1 Ответ

4 голосов
/ 22 июня 2011

Вы добавляете маршруты во время выполнения, что кажется хорошим подходом (хотя вам, вероятно, следует проверить, существует ли маршрут, прежде чем переопределять его). Вы также можете сделать это как ловушку с подстановочным символом подстановки, а затем передать запрос немного позже.

http://mojolicio.us/perldoc/Mojolicious/Guides/Routing#Wildcard_Placeholders

$r->get('/(*everything)' )->to('mycontroller#aliases');
...