X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FIntro.pod;h=910c4c0d1409da4273976f47a34f59f1b1bad3fb;hp=314ced440d5ee1d260f0d8ff0a6ec57426e95e0f;hb=e76c67cbd171d25797fc03a72118dfa0b7fad6cd;hpb=d416846e8bfec3729c4846017649fb306838af67 diff --git a/lib/Catalyst/Manual/Intro.pod b/lib/Catalyst/Manual/Intro.pod index 314ced4..910c4c0 100644 --- a/lib/Catalyst/Manual/Intro.pod +++ b/lib/Catalyst/Manual/Intro.pod @@ -421,6 +421,54 @@ C<$c-Ereq-Ecaptures-E[0]> would be "23". If you want to pass arguments at the end of your URL, you must use regex action keys. See L below. +=item * B + + sub section :PathPart('section') :ChildOf('/') :Captures(1) { } + +ChildOf is a powerful way to handle canonical URIs of the form +/section/1/item/2 + +Taking the above URI as an example in Controller::Root you can do the following :- + + sub section_handler :PathPart('section') :ChildOf('/') :Captures(1) { + my ( $self, $c ) = @_; + $c->stash->{'section'} = $c->Model('Sections')->find($c->req->captures->[0]); + } + + sub item_handler :PathPart('item') :ChildOf('/section_handler') :Args(1) { + my ( $self, $c ) = @_; + $c->stash->{'item'} = $c->stash->{'section'}->find_related('item',$c->args->[0]); + } + +The subroutine section_handler matched the path segment 'section' as a child of '/'. It +then took the next path segment, as referenced by :Captures(1) and stashed it in the +arrayref $c->req->captures. Since there was also a child of this handler - it also gets run. +The same rules apply here - This time however it has the 'Args' attribute which means +this particular routine will run if there is exactly 1 argument. See Args below for more +options. + +=item ChildOf('xyz') + +The action of the parent - for instance, if you have method item_handler in controller +SuperMarket::Aisle, the action would be /supermarket/aisle/item_handler. For a root handler +this would be '/'. + +=item PathPart('xyz') + +The name of this path section in the ChildOf tree mapping to the URI. + +=item Captures(int) + +Will 'collapse' the next x path segments in the request URI and push them into +the arrayref $c->req->captures + +=item Args(int) + +The number of path segments to capture at the end of a request URI. This *must* be +included in your leaf nodes. You can use Args(0) for an equivalent of the index +action. +Args with no parameters will capture every postfixed segment into $c->req->args. + =item * B (B) package MyApp::Controller::Foo;