Catalyst: сопоставить URL с указанным c, но необязательными аргументами - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь написать контроллер Catalyst, который соответствует указанному пути c, но с одним необязательным аргументом. Это похоже на то, что было бы идеально для Regex, но это устарело, и я не могу понять, как использовать Chained для выполнения sh. Кроме того, я на самом деле не хочу иметь несколько методов, как это работает в Chained - я просто хочу один. лучший способ передать необязательные аргументы url в контроллере Catalyst? , но это из девяти лет go, и мне все еще неясно.)

Все, что я пытаюсь сделать соответствует пути, который может иметь ровно четыре или пять аргументов. Я использую Catalyst :: Controller :: REST, если это влияет на вещи.

sub review : Path('/review') : Args(4) : ActionClass('REST') {}
sub review_GET {
    my ( $self, $c, $catalog_id, $item_id, $order_no, $event_id, $OPTIONAL_SOMETHING_ELSE) = @_;
    # do stuff...
}

Вот и все. Если у меня есть простой Args(), тогда я могу сопоставить любое количество аргументов, но я не хочу этого: я хочу сопоставить только четыре или пять аргументов. (Мне не нужно беспокоиться об ограничениях типов; я обрабатываю это в коде.) Но обработка этого должна быть такой же; Я не хочу иметь совершенно другой метод для обработки вызова с четырьмя аргументами по сравнению с вызовом с пятью аргументами, который, похоже, будет работать Chained. То же самое будет go для двух методов, один с Args(4) и один с Args(5) - они не должны быть разделены.

Спасибо.

...