2011-08-22 42 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'); 
} 
相关问题