2011-08-22 3 views
7

내가 촉매 초보자의 비트 해요, 나는 여러 체인이 같은 엔드 포인트 ('설명'서브 루틴) 예를 들어 액세스하려고 노력 해요 :여러 체인이 Catalyst에서 동일한 엔드 포인트를 공유하도록 허용하는 방법이 있습니까?

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

내가 쓰고 싶지 않아 예를 들어 3 개의 개별 엔드 포인트에 대한 코드를 작성하고 대신 엔드 포인트를 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 

및 기존 코드를 동시에 줄이십시오 : 'fetch'가 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'); 
} 
관련 문제