2012-06-20 81 views

回答

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/*/* 
+0

即清除它很好,謝謝。 – friedo

5

CaptureArgs在催化劑鏈式方法中使用。

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是chain的結束方法。要標記鏈接操作的結尾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. 
相關問題