Par exemple:Quelle est la meilleure façon de gérer les arguments url optionnels dans un contrôleur Catalyst?
Je sais comment faire correspondre www.domain.com/foo/21
sub foo : Path('/foo') Args(1) {
my ($self, $c, $foo_id) = @_;
# do stuff with foo
}
Mais comment puis-je correspondre www.domain.com/foo/21 OU www.domain.com/foo/21/bar/56?
sub foo : <?> {
my ($self, $c, $foo_id, $bar_id) = @_;
# do stuff with foo, and maybe do some things with bar if present
}
Merci
Mise à jour: Suite à la suggestion de Daxim, j'ai essayé d'utiliser: Regex
sub foo : Regex('foo/(.+?)(?:/bar/(.+))?') {
my ($self, $c) = @_;
my ($foo_id, $bar_id) = @{ $c->req->captures };
}
Mais cela ne semble pas fonctionner; l'url correspond, mais $ bar_id est toujours undef. Si je supprime l'opperateur optionnel à la fin de la regex alors il saisit $ bar_id correctement, mais alors foo et la barre doivent être présents pour obtenir une correspondance d'URL. Je ne suis pas sûr si c'est un problème de perl regex, ou un problème de Catalyst. Des idées?
Mise à jour:
Comme le souligne Daxim sur, est un problème regex. Je ne vois pas pourquoi l'expression rationnelle ci-dessus ne fonctionne pas, mais j'ai réussi à en trouver un qui ne:
sub foo : Regex('foo/([^/]+)(?:/bar/([^/]+))?') {
my ($self, $c) = @_;
my ($foo_id, $bar_id) = @{ $c->req->captures };
}
(je ne pas utiliser \ d + dans les captures comme Daxim a fait que mes ids peut-être pas être numérique)
Merci à tous pour l'aide et suggestions, j'ai appris beaucoup sur la gestion des urls Catalyst: D
Merci pour le pointeur daxim, mais je ne peux pas obtenir l'expression rationnelle optionnelle pour travailler - j'ai mis à jour la question avec les détails. – nick
Oui, c'est un problème de regex - merci! J'ai mis à jour mon message avec le code de travail. – nick