Perl 如何使用Catalyst';什么是自动开始?

Perl 如何使用Catalyst';什么是自动开始?,perl,catalyst,Perl,Catalyst,我想要两种特殊的方法: 为所有URL运行的一个 仅为特定路径(/admin)运行的 我认为最通用的方法应该是使用begin,而/admin的方法应该使用auto。例如,在这两个Catalyst控制器中: package MyApp::Controller::Root; sub begin :Private { my ($self, $c) = @_; $c->log->debug('Run for all URLs'); } [……] 但这并没有达到我想要的

我想要两种特殊的方法:

  • 为所有URL运行的一个
  • 仅为特定路径(/admin)运行的
我认为最通用的方法应该是使用
begin
,而/admin的方法应该使用
auto
。例如,在这两个Catalyst控制器中:

package MyApp::Controller::Root;

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

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

但这并没有达到我想要的。正确的解决方案是什么

EDIT:问题是当我访问/admin或/admin时,从未调用
Addmin::auto()
/


经过更多测试后,
auto
永远不会被调用。我试着把auto放在不同的地方,它从来没有被调用过。

没有明显的理由说明你所描述的东西不能满足你的要求。这是正确的做法

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


每个子节点的第二行应以“;”结尾。我假设这是SO中的输入错误,而不是您的原始代码。

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

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

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

这阻止了在Admin.pm中触发自动功能,您需要提供更多信息。
__PACKAGE__->config->{namespace} = '';