Есть ли способ разрешить нескольким цепочкам использовать одну и ту же конечную точку в Catalyst? - PullRequest
7 голосов
/ 22 августа 2011

Я немного новичок в 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
}

Или я мог бы написать разные подпрограммы описания для каждой цепочки, которые все вызывают подпрограмму общего описания, но любые более элегантные решения были бы хороши! Любая помощь должна быть высоко оценена!

Ответы [ 2 ]

5 голосов
/ 23 августа 2011

Рассматривали ли вы рефакторинг ваших существующих сабов к чему-то вроде:

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

Вы можете обнаружить, что можете одновременно решить проблему конечной точки и сократить существующий код: у 'fetch' есть два аргумента: метод поиска и значение, а также описание цепочки до конца.

2 голосов
/ 23 августа 2011

Катализатор будет использовать $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');
}
...