Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Dynamic" routes in Mojolicious

I would like to implement something like "dynamic" routes in my Mojolicious app. I have some pre-defined "static" routes and a DB table with URL aliases: '/alias' -> '/URL'. Now I'm defining routes on-the-fly and it looks like this:

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

But is there any better way?

like image 901
deadboy Avatar asked May 05 '11 13:05

deadboy


1 Answers

You are adding routes at runtime which seems a good approach (although you should probably check if a route exists before overriding it). You could also do it as a catchall with a wildcard placeholder then handoff the request a bit later on.

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

$r->get('/(*everything)' )->to('mycontroller#aliases');
like image 80
CoffeeMonster Avatar answered Sep 22 '22 20:09

CoffeeMonster