2011-08-22 20 views
7

Soy un poco de un novato catalizador, y yo estoy tratando de conseguir múltiples cadenas para acceder al mismo punto final ('descripción' subrutina), por ejemplo:¿Hay alguna manera de permitir que varias cadenas compartan el mismo punto final en Catalyst?

/object/fetch_by_id/*/description 
/object/fetch_by_name/*/description 
/object/fetch_by_xref/*/description 

yo no quiero tener que escribir código para 3 puntos finales separados, por ejemplo, y en su lugar permite que el punto final se comparta entre las tres acciones encadenadas diferentes. Estoy envolviendo una API back-end y en este ejemplo el objeto puede ser recuperado a través de diferentes métodos.

La solución ideal sería:

sub description : Chained('fetch_by_id','fetch_by_name','fetch_by_xref') PathPart('description') Args(0) ActionClass('REST') { 
    # code here 
} 

O podría escribir diferentes subs descripción de cada cadena que todos llaman la descripción subrutina genérica, pero ninguna solución más elegante sería grande! ¡Cualquier ayuda debería ser muy apreciada!

Respuesta

5

¿Usted ha considerado Refactorizando submarinos existentes a algo como:

/object/fetch/id/*/description 
/object/fetch/name/*/description 
/object/fetch/xref/*/description 

Puede que le puede resolver tanto el problema de punto final y reduzca su código existente al mismo tiempo: tenga 'fetch' tome dos argumentos: método de búsqueda y valor, y descripción de la cadena hasta el final.

2

La forma del catalizador sería utilizar $c->forward

sub description : Chained('fetch_by_id') PathPart('description') Args(0) ActionClass('REST') { 
    # code here 
} 

sub alias_1 : Chained('fetch_by_name') PathPart('description') Args(0) ActionClass('REST') { 
    my ($self, $c) = @_; 
    $c->forward('description'); 
} 
Cuestiones relacionadas