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).
I just realised I made a little mistake too, given that the chained action indeed triggers off something like /date - you could chain the date capture bit to / (PathPart '') but that might get you some unexpected results.

There are 2 solutions:

1) Use the 'default' action:

sub default :Private {
 my $self = shift;
 my $c = shift;
 my @requested_uri = (@_);

 my $potential_date = shift(@requested_uri);
 if($potential_date =~ /(\d{4}-\d{2}-\d{2})/) {
   $c->stash->{date} = $1;
   my $bit_after_date = shift(@requested_uri);
   my @remainder = @requested_uri;
   $c->detach('Your::Controller', $bit_after_date, [ @remainder ]);
 } else {
    # 404?
 }
}

The above very much expanded to make clear what happens. If I go to the URI /2010-10-10/foo, it strips the date off and stashes it, and then forwards to Your::Controller->foo() - if I go to the URI /2010-10-10/foo/bar it will dispatch to Your::Controller->foo as well, but passes 'bar' as first argument (basically assuming that 'foo' is a :Local action)

Another option is to muck with the Catalyst internals a bit, I think there's a hook of sorts you can override in your controller that lets you examine the URI before it's dispatched to a controller, and it also lets you *modify* the URI before dispatching. Internal rewrite rules, as it were.

Wait, third option: use rewrite rules, as you mentioned, because in theory this means that if a date is there, it acts the same as if there is no date present, and you can always examine $ENV{DATE} to see if it's there.

The above might not be the best ways to get done what you want, but it's the best I can come up with late at night :) Maybe some other people can pitch in?

--
Ben van Staveren
phone: +62 81 70777529
email: [email protected]


_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to