我想要两种特殊方法:
我认为最常见的是使用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
。我试图把汽车放在不同的地方,它永远不会被召唤。
答案 0 :(得分:3)
没有明显的理由说明为什么你所描述的并不能满足你的要求。这将是正确的方法。
日志应显示调度路径以及您的请求是否通过这些操作进行路由。如果没有,它会告诉你如何处理它。
每个sub的第二行应以';'结尾。我假设这是SO中的拼写错误,而不是原始代码。
答案 1 :(得分:3)
问题实际上如下:两个控制器都有这一行:
__PACKAGE__->config->{namespace} = '';
这阻止了在Admin.pm
中触发自动功能答案 2 :(得分:1)
你在Controller :: Admin中有一个开始动作吗?正如RET所说,你描述事物的方式应该很好;带有“全局开始”的唯一警告是,如果你在任何其他控制器中放置一个开头,它将“遮蔽”全局控制器,因为每个操作只运行一个开始,并且它是“最具体”的开头(最长的)私有路径命名空间)。