2011-08-22 83 views
7

我有點催化劑新手,而我試圖讓多個鏈訪問相同的端點(「說明」子程序),例如:有沒有辦法讓多個鏈在Catalyst中共享相同的端點?

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

我不希望有寫例如,代碼爲3個單獨的端點,並允許在三個不同的鏈接操作之間共享端點。我正在封裝一個後端API,在這個例子中,可以通過不同的方法來獲取對象。

理想的解決辦法是:

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

或者,我可以寫爲每個鏈的所有調用的一般描述子程序不同的描述潛艇,但是任何更優雅的解決方案將是巨大的!任何幫助應該非常感謝!

回答

5

你有沒有考慮重構現有的潛艇,以這樣的:

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

你可能會發現你可以同時解決終點問題,同時減少現有的代碼:'取'有兩個參數:lookup-method和value,以及鏈表描述。

2

催化劑的方法是使用$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'); 
} 
相關問題