X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FDispatcher.pm;h=91ae6fc8ddf21671d95203857f78178efc2ad857;hp=4cad8c74a36673d92047b5e53589c90de7afa8d3;hb=52f71256fa6baba38de781b3074884ff0d12769f;hpb=2f3812528068bc1d9f7840067f0c03d36cd47e6d diff --git a/lib/Catalyst/Dispatcher.pm b/lib/Catalyst/Dispatcher.pm index 4cad8c7..91ae6fc 100644 --- a/lib/Catalyst/Dispatcher.pm +++ b/lib/Catalyst/Dispatcher.pm @@ -178,6 +178,8 @@ sub go { return 0; } + $action = $self->expand_action($action); + local $c->request->{arguments} = $args; $c->namespace($action->namespace); $c->action($action); @@ -211,7 +213,7 @@ sub forward { no warnings 'recursion'; my $orig_args = $c->request->arguments(); - $c->request->arguments(\@args); + $c->request->arguments($args); $action->dispatch( $c ); $c->request->arguments($orig_args); @@ -421,6 +423,17 @@ sub uri_for_action { return undef; } +sub expand_action { + my ($self, $action) = @_; + + foreach my $dispatch_type (@{ $self->_dispatch_types }) { + my $expanded = $dispatch_type->expand_action($action); + return $expanded if $expanded; + } + + return $action; +} + =head2 $self->register( $c, $action ) Make sure all required dispatch types for this action are loaded, then