10

通常、これら 2 つのオプションのさまざまな組み合わせをランダムに試すだけで、希望する動作を得ることができますが、それらが何をするかを正確に知っているとは言えません。違いを示す具体的な例はありますか?

4

2 に答える 2

8

:CaptureArgs(N)少なくとも N 個の引数が残っている場合に一致します。これは、非ターミナル チェーン ハンドラに使用されます。

:Args(N)正確に N 個の引数が残っている場合にのみ一致します。

例えば、

sub catalog : Chained : CaptureArgs(1) {
    my ( $self, $c, $arg ) = @_;
    ...
}

sub item : Chained('catalog') : Args(2) {
    my ( $self, $c, $arg1, $arg2 ) = @_;
    ...
}

マッチ

/catalog/*/item/*/*
于 2012-06-20T00:18:00.327 に答える
5

CaptureArgsCatalyst の連鎖メソッドで使用されます。

Args連鎖メソッドの終わりを示します。

例:

sub base_method : Chained('/') :PathPart("account")  :CaptureArgs(0)
{

}
sub after_base : Chained('base_method') :PathPart("org") :CaptureArgs(2)
{

}
sub base_end : Chained('after_base') :PathPart("edit")  :Args(1)
{

}

上記の連鎖メソッドが一致し/account/org/*/*/edit/*ます。

base_endチェーンの end メソッドは次のとおりです。チェーン アクションの終了をマークArgsするためにCaptureArgs使用されます。使用されている場合は、チェーンがまだ進行中であることを意味します。

Argsメソッドに引数を指定するために、Catalyst の他のメソッドでも使用されます。

cpan Catalyst::DispatchType::Chainedからも:

The endpoint of the chain specifies how many arguments it
 gets through the Args attribute. :Args(0) would be none at all,
 :Args without an integer would be unlimited. The path parts that 
aren't endpoints are using CaptureArgs to specify how many parameters
 they expect to receive.
于 2012-06-20T06:47:50.600 に答える