2012-06-20 8 views
10

私は通常、これらの2つのオプションの異なる順列を無作為に試して、私が望む動作を得ることができますが、私は彼らが何をするのか正確には分かりません。違いを実証する具体的な例はありますか?Argsと:CatalystのCaptureArgsの違いは何ですか?

答えて

8

:CaptureArgs(N)は、少なくともN個の引数が残っていれば一致します。これは、非終端の連鎖ハンドラーに使用されます。

:Args(N)は、正確にN個のargsが残っている場合にのみ一致します。例えば

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

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

マッチ

+0

、感謝します。 – friedo

5
/catalog/*/item/*/* 

CaptureArgsは、触媒中の連鎖方法において使用されます。

Argsマークはチェーンされたメソッドの終了を示します。 EXのために

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はチェーンの終了方法です。チェーンアクションの終了マークArgsが使用されます。CaptureArgsが使用されている場合、チェーンがまだ進行中であることを意味します。

Argsはまた、方法の引数を特定するための触媒の他の方法においても使用される。 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. 
関連する問題