我应该如何通过Catalyst中的配置文件禁用操作?

时间:2010-10-24 14:35:57

标签: perl catalyst

我有一个控制器,其中包含使用链接设置的操作。我的链式根操作在我的根控制器中,然后我的“部分”控制器具有从根控制器的“根”动作链接的“根”动作。然后我在'section'控制器类中有端点操作,它从同一类中的'root'操作链接:

 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) {}

如何通过配置文件禁用'section'包中的所有操作?到目前为止我所做的是在部分类Private中进行'root'操作,这似乎有效,但是当我通过导航构建时,如何判断该部分不可用?我可以尝试uri_for_action并返回undef,但这看起来有点乱,它确实引发了一个警告,Catalyst无法找到该动作的uri_for。

1 个答案:

答案 0 :(得分: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>