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 に答える