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
}

或者我可以为所有调用通用描述子例程的每个链编写不同的描述子程序,但是任何更优雅的解决方案都会很棒!任何帮助都将不胜感激!

4

2 回答 2

5

您是否考虑过将现有的潜艇重构为:

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

您可能会发现您可以同时解决端点问题并减少现有代码:让 'fetch' 接受两个参数:查找方法和值,以及将描述链接到末尾。

于 2011-08-23T00:00:54.627 回答
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');
}
于 2011-08-22T23:10:29.257 回答