1

我有一个控制器,它具有使用链式设置的操作。我的链接根操作在我的根控制器中,然后我的“部分”控制器有一个与根控制器的“根”操作链接的“根”操作。然后,我在“节”控制器类中具有端点操作,该操作从同一类中的“根”操作链接:

 package MyApp::Controller::Root;

 sub root :Chained('/') PathPart('') CaptureArgs(0) {}

 package MyApp::Controller::Section;

 sub root :Chained('/root') PathPrefix CaptureArgs(0) {}

 sub foo :Chained('root') PathPart Args(0) {}

如何通过配置文件禁用“部分”包中的所有操作?到目前为止,我所做的是在部分类 Private 中设置“根”操作,这似乎有效,但是当我通过导航构建时,我如何判断该部分不可用?我可以尝试 uri_for_action 并返回 undef,但这似乎有点混乱,并且确实会发出警告,即 Catalyst 无法找到该操作的 uri_for。

4

1 回答 1

4

您应该能够通过以下方式内省当前调度的操作

my $action = $ctx->action;

由于动作对象带有它们的属性,你可以在你的基础链调用中检查一个真值:

sub root: Chained PathPart('') CaptureArgs(0) {
    my ($self, $ctx) = @_;
    $ctx->dispatch('/your/action/handling/this/error')
        if $ctx->action->attributes->{Disabled};
}

然后你可以在你的配置中配置它,就像http://search.cpan.org/dist/Catalyst-Runtime/lib/Catalyst/Controller.pm#action中描述的那样(在这里使用 config::General 语法):

<controller Foo>
    <action "you_want_to_disable_this">
        Disable 1
    </action>
</controller>
于 2010-10-24T16:21:08.877 回答