сопоставлять регистр имен без учета регистра в контроллере Catalyst - PullRequest
0 голосов
/ 26 марта 2012
__PACKAGE__->config(namespace => 'Hello')

Теперь рассмотрим, что у меня есть вышеприведенное утверждение в моем контроллере катализатора Hello.pm.
Это будет соответствовать http://localhost:3000/Hello в URL.
Но я также хочу соответствовать http://localhost:3000/hello.

Один способ, которым я пытался добиться этого, как показано ниже

sub match_hello : Path('/hello')
{
my ( $self, $c ) = @_;
$c->response->body("lowercase hello also matched"); 

}

Но, можем ли мы добиться того же, используя выражение __PACKAGE__->config(namespace => ... )?

1 Ответ

0 голосов
/ 26 марта 2012

Не нужно связываться с пространствами имен. Читать Типы действий в Catalyst::Manual::Intro.

Добавить действие LocalRegex к корневому контроллеру.

sub match_hello :LocalRegex('(?i)^hello$') {
    my ($self, $c) = @_;
    $c->response->body('case-insensitive hello matches');
}

Отладочный вывод:

[debug] Loaded Regex actions:
.-------------------------------------+--------------------------------------.
| Regex                               | Private                              |
+-------------------------------------+--------------------------------------+
| ^(?:.*?)(?i)^hello$                 | /match_hello                         |
'-------------------------------------+--------------------------------------'

Запрос:

$ GET http://localhost:5000/HeLlO
case-insensitive hello matches
...