2011-05-05 8 views
6

Mojolicious 앱에 "동적 인"경로를 구현하고 싶습니다. 일부 미리 정의 된 "정적"경로와 URL 별칭이있는 DB 테이블이 있습니다 : '/ 별칭'-> '/ URL'. 이제는 즉석에서 노선을 정의하고 있습니다. 다음과 같이 보입니다.Mojolicious의 "동적"경로

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

더 좋은 방법이 있습니까?

답변

4

런타임에 경로를 추가하는 것은 좋은 접근 방법입니다 (경로를 재정의하기 전에 경로가 있는지 확인해야 할 것입니다). 와일드 카드 자리 표시자를 사용하여 catchall로 처리 한 다음 나중에 요청을 전달할 수도 있습니다.

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

당신은 당신이 당신의 경로 목록의 맨 아래에있는 포괄 넣으면 경로가 존재하는지 확인 할 필요가 없습니다
$r->get('/(*everything)')->to('mycontroller#aliases'); 
+0

. 경로는 순차적으로 시도되고 첫 번째 일치가 사용됩니다. –