在Catalyst控制器中匹配命名空间不区分大小写

时间:2012-03-26 06:42:16

标签: perl catalyst

__PACKAGE__->config(namespace => 'Hello')

现在考虑我在催化剂控制器Hello.pm中有上述陈述 这将与网址中的http://localhost:3000/Hello匹配 但我也希望匹配http://localhost:3000/hello

我尝试实现此目的的一种方式如下

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

}

但是,我们也可以使用__PACKAGE__->config(namespace => ... )语句实现相同的目标吗?

1 个答案:

答案 0 :(得分:0)

无需弄乱名称空间。阅读Action types in 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