Как мне отключить действие через конфигурационный файл в Catalyst? - PullRequest
1 голос
/ 24 октября 2010

У меня есть контроллер, действия которого настраиваются с помощью цепочки.Мое цепочечное действие root находится в моем корневом контроллере, тогда у моего контроллера «section» есть действие root, связанное с действием root корневого контроллера.Затем у меня есть действия конечной точки в классе контроллера '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' черезфайл конфигурации?До сих пор я выполнял действие root в классе секции Private, и это, похоже, работает, но как я могу сказать, что этот раздел недоступен, когда я строю с помощью навигации?Я могу попробовать uri_for_action, и это возвращает undef, но это выглядит немного грязно, и это выдает предупреждение, что Catalyst не может найти uri_for для действия.

1 Ответ

4 голосов
/ 24 октября 2010

Вы должны иметь возможность проанализировать текущее отправленное действие с помощью

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>
...