我是一个Catalyst新手,我正试图让多个链访问同一个端点('description'子例程),例如:
/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
}
或者我可以为每个链调用通用描述子例程编写不同的描述子,但任何更优雅的解决方案都会很棒!任何帮助都应该非常感谢!
答案 0 :(得分:5)
您是否考虑过将现有的潜艇重构为:
/object/fetch/id/*/description
/object/fetch/name/*/description
/object/fetch/xref/*/description
您可能会发现可以同时解决端点问题并减少现有代码:让'fetch'接受两个参数:lookup-method和value,以及链描述到最后。
答案 1 :(得分: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');
}