Справочная информация:
Я использую инфраструктуру CRUD в Catalyst, которая автоматически генерирует формы и списки для всех таблиц в данной базе данных.Например: / admin / list / person или / admin / add / person или / admin / edit / person / 3 - все динамически генерируют страницы или формы в соответствии с таблицей person.(Другими словами, в Admin.pm есть действия edit, list, add, delete и т. Д., Которые ожидают аргумент таблицы и, возможно, аргумент, идентифицирующий строку.)
Вопрос:
В конкретном приложении, которое я создаю, база данных будет использоваться несколькими клиентами, поэтому я хочу ввести схему URI, где первым элементом является идентификатор клиента, а затем административное действие / таблица и т. Д.
- / cust1 / admin / list / person
- / cust2 / admin / add / person
- / cust2 / admin / edit / person / 3
Это делается для целей «брендинга», а также для обеспечения того, чтобы закладки или URL-адреса, передаваемые от одного пользователя другому, выполняли ожидаемые действия.
Но у меня много проблем с тем, чтобы заставить это работать,Я бы предпочел не вносить изменения в сабвуферы в существующей платформе, поэтому я пробовал варианты на следующем:
sub customer : Regex('^(\w+)/(admin)$') {
my ($self, $c, @args) = @_;
#validation of captured arg snipped..
my $path = join('/', 'admin', @args);
$c->request->path($path);
$c->dispatcher->prepare_action($c);
$c->forward($c->action, $c->req->args);
}
Но он просто не будет себя вести.Я много раз использовал действия по сопоставлению регулярных выражений, но помещать их в самый первый «баррель» URI кажется необычайно травматичным.Любые предложения с благодарностью получены.