[Catalyst] Not sure how to go about this ... or if this idea is even a good one ...

Joe Landman landman at scalableinformatics.com
Sun Feb 10 07:38:45 GMT 2008


Hate replying to myself, but neither method seems to work.

Will need to look at this more ... it seems really simple, which means I 
am missing the obvious.

Joe Landman wrote:
> 
> Ok, starting to want to play with Chained actions for an app, and I am 
> not sure they are the right fit.  Possibly a round peg in this 
> particular square hole.
> 
> Here is what I want to do.  I want to capture 0, 1, or 2 arguments on 
> the URL.
> 
> If 0 args, then forward over to one method.
> 
> If 1 arg, then forward over to a specific method
> 
> If 2 args, then forward over to a different specific method.
> 
> I don't want to go beyond 2 args for this, but you should get the idea.
> 
> This is sort of a drill-in type application.
> 
> Ok.  Does chained make sense for this versus
> 
> sub do_stuff : Path('/') {
>   my ($self, $c, @my_args) = @_;
> 
>   if ($#my_args == -1)
>      {
>        $c->forward('zero_args');
>      }
>   elsif ($#my_args == 0)
>      {
>        $c->forward('one_arg', at my_args);
>      }
>   elsif ($#my_args == 1)
>      {
>        $c->forward('two_arg', at my_args);
>      }
>  }
> 
> The issue in this case is that I won't know the value of the first or 
> second arg in advance (they are coming from a database).  So I am not 
> sure if I can do something like
> 
>  #   root action - captures one argument after it
>   sub zero : Path('/') {
>       my ( $self, $c  ) = @_;
>       ...
>   }
> 
>   sub one_arg : Chained('/') PathPart('') CaptureArgs(1) {
>       my ( $self, $c, $foo_arg ) = @_;
>      ...
>   }
> 
>   sub two_arg : Chained('/') PathPart('') CaptureArgs(2) {
>       my ( $self, $c, $foo_arg, $bar_arg) = @_;
>      ...
>   }
> 
> that is, the particular sub to execute is a function not of the path, 
> but of the number of arguments.
> 
> Is this a job for chained?
> 
> -- 
> Joe Landman
> landman at scalableinformatics.com



More information about the Catalyst mailing list