[Catalyst] Forward on to other actions after removing first path segment?

Dorian Taylor (Lists) dorian.taylor.lists at gmail.com
Mon Nov 15 18:34:21 GMT 2010

Hi Ben, thanks for replying!

On 15-Nov-10, at 4:00 AM, Ben van Staveren wrote:

> You want chained actions.
> package MyApp;
> sub _date :Chained('/') CaptureArgs(1) PathPart('date') {
> my $self = shift;
> my $c = shift;
> my $date = shift;
> $c->detach('invalid_date') unless($date =~ /^\d{4}-\d{2}-\d{2}/);
> $c->stash->{date} = $date;
> }
> sub something_using_the_date :Chained('/date')  
> PathPart('something_using_the_date') {
> my $self = shift;
> my $c = shift;
> $c->res->body("Hi, you were looking for date: " . $c->stash->{date});
> }

OK, just that my objective is to optionally prepend just the YYYY-MM- 
DD format. The PathPart attribute looks as if it wants the actual  
literal value of a path segment (in your example, 'date'). Consider:

Request-URI: /2010-11-15/foo

* MyApp::_date is triggered
* Removes the date from the first path segment and stashes it
* Forwards to MyApp::Foo::index as if it was a fresh request and the  
date path segment was never there (except it is, in the stash).

The reason why I want to do this is because I also want to be able to  
access /foo (aka MyApp::Foo::index) sans any date in the first path  
segment, and likewise write everything else as if it was agnostic to  
this behaviour. Spoken another way:

RewriteRule ^/(\d{4}-\d{2}-\d{2})(.*) /$2 [E=DATE:$1]

Does this behaviour still map to chained actions?

Dorian Taylor
Make things. Make sense.

More information about the Catalyst mailing list