2011-08-22 14 views
7

Sono un po 'di un novizio catalizzatore, e io sto cercando di ottenere più catene di accedere allo stesso punto finale ('Descrizione' subroutine), ad esempio:Esiste un modo per consentire a più catene di condividere lo stesso endpoint in Catalyst?

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

non voglio dover scrivere ad esempio, il codice per 3 endpoint separati e consente invece di condividere l'endpoint tra le tre diverse azioni concatenate. Sto eseguendo il wrapping di un'API di back-end e in questo esempio l'oggetto può essere recuperato tramite metodi diversi.

La soluzione ideale sarebbe:

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

Oppure avrei potuto scrivere diversa descrizione subs per ogni catena che tutti chiamano la descrizione generica subroutine, ma qualsiasi soluzione più elegante sarebbe grande! Qualsiasi aiuto dovrebbe essere molto apprezzato!

risposta

5

Avete preso in considerazione il refactoring tuoi sottomarini esistenti a qualcosa di simile:

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

Si potrebbe trovare si può risolvere sia il problema end-point e riduci il codice esistente allo stesso tempo: fai "fetch" prendi due argomenti: lookup-method e value, e chain description alla fine.

2

Il modo catalizzatore sarebbe quello di utilizzare $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'); 
} 
Problemi correlati