我如何使用Catalyst的auto并开始使用?

时间:2009-10-28 04:09:03

标签: perl catalyst

我想要两种特殊方法:

  • 为所有网址运行的
  • 仅针对特定路径( / admin
  • 运行的路径

我认为最常见的是使用begin / admin 的方法会使用auto。例如,在这两个Catalyst控制器中:

package MyApp::Controller::Root;

sub begin :Private {
    my ($self, $c) = @_;

    $c->log->debug('Run for all URLs');
}

[...]

package MyApp::Controller::Admin;

sub auto :Private {
    my ($self, $c) = @_;

    $c->log->debug('Run for /admin only');
}

但这并没有实现我想要的。什么是正确的解决方案?

编辑:问题是永远不会调用Addmin::auto(),而不是在我访问 / admin / admin / <时/ p>

经过多次测试后,永远不会调用auto。我试图把汽车放在不同的地方,它永远不会被召唤。

3 个答案:

答案 0 :(得分:3)

没有明显的理由说明为什么你所描述的并不能满足你的要求。这将是正确的方法。

日志应显示调度路径以及您的请求是否通过这些操作进行路由。如果没有,它会告诉你如何处理它。

每个sub的第二行应以';'结尾。我假设这是SO中的拼写错误,而不是原始代码。

答案 1 :(得分:3)

问题实际上如下:两个控制器都有这一行:

__PACKAGE__->config->{namespace} = '';

这阻止了在Admin.pm

中触发自动功能

答案 2 :(得分:1)

你在Controller :: Admin中有一个开始动作吗?正如RET所说,你描述事物的方式应该很好;带有“全局开始”的唯一警告是,如果你在任何其他控制器中放置一个开头,它将“遮蔽”全局控制器,因为每个操作只运行一个开始,并且它是“最具体”的开头(最长的)私有路径命名空间)。