我有一个控制器,其中包含使用链接设置的操作。我的链式根操作在我的根控制器中,然后我的“部分”控制器具有从根控制器的“根”动作链接的“根”动作。然后我在'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。
答案 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>