[Catalyst] Programmatic way to determine the needed number of captures for an action?

John Napiorkowski jjn1056 at yahoo.com
Fri Nov 3 22:13:04 GMT 2006


Hi,

I have a question about $c->uri_for and chained
actions.

I've really enjoyed having this feature to
programmatically create urls for me in the code.  It's
one of the greatest things about Catalyst I think. 
However one thing that is a bit tricky is that when
using $c->uri_for with chained actions you have to be
careful to supply the correct number of captures.  If
you give too few or too many then $c->uri_for will
return an undef.

So something I am trying to figure out is how to
determine in code (without knowing in advance) how
many captures a given chained action will expect so
that I can supply it correctly.

You can look at the Args and CaptureArgs attribute for
a single action, but if that action is an endpoint in
a chain, and actions earlier in the chain require
Args, I can't find a straightforward way to get the
total number of required Args for a given Chain
endpoint.

Here's an example of my issue:

Let's say I have a controller with two actions 'base'
and 'item'.  item is chained to base, with base as the
root and item requires an argument:

Controller One;

sub base Chained('/') CaptureArgs(0) {}

sub item (Chained('base') Args(1) {}

Now in my second controller I have:

Controller Two

sub base Chained('/') CaptureArgs(1) {}

sub item (Chained('base') Args(1) {}

For controller one I can get the URL with:

$c->uri_for($->controller(..)->action_for('base'));

But for the second controller I'd need:

$c->uri_for($->controller(..)->action_for('base'),
[$capture]);

What I am trying to do is to write some code that
looks at the number of arguments a given action needs
and automatically supplies that number off the current
captures list.

I can see that I could do this by adding some
additional metadata fields to my custom Action
Classes, but I was trying to see if there was a
canonically correct way to do this in Catalyst.

Anyone know?

Thanks!

John


 
____________________________________________________________________________________
Get your email and see which of your friends are online - Right on the New Yahoo.com 
(http://www.yahoo.com/preview) 




More information about the Catalyst mailing list