나는 보통이 두 가지 옵션의 다른 순열을 무작위로 시도하여 내가 원하는 동작을 얻을 수 있지만, 나는 그들이 무엇을하는지 정확하게 알 수 없다. 그 차이를 보여주는 구체적인 예가 있습니까?Args와 : Catalyst의 CaptureArgs의 차이점은 무엇입니까?
10
A
답변
8
:CaptureArgs(N)
은 최소한 N 개 args가 남아 있으면 일치합니다. 체인이 아닌 핸들러에 사용됩니다.
: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/*/*
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
은 체인의 끝 방법입니다. 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.
, 감사합니다. – friedo