[Catalyst] how to get controller path

Alok Sharma alok at deeproot.co.in
Wed Nov 21 06:01:40 GMT 2007


On Tuesday 20 November 2007 18:22:54 Matt S Trout wrote:
> On Tue, Nov 20, 2007 at 12:27:32PM +0530, Alok Sharma wrote:
> > Given a path we have ways to get the uri using the method uri_for(path).
> > Is there a  possible way to get the controller path given the uri so I am
> > able to do some thing like this
> > 	$c->res->redirect(uri); $c->forward(controller_path(uri));
>
> Why can't you start off with a controller action?
>
> my $action = $c->controller('Foo')->action_for('bar'); #
> Controller::Foo->bar
>
> $c->res->redirect($c->uri_for($action));
> $c->forward($action->reverse);

I was trying to write a module where the user asks for a particular URI but 
for certain reasons ( say session expired or not yet logged etc. ) has to be 
authenticated again and then user will be automatically redirected to the 
requested page,in a way furnishing something before actual request is 
processed. 
For this I saved the URI requested ( say as $path ) as a session variable, 
redirected to the authentication page ( say to the standard login page ). But 
the issue was to redirect to the page requested by the user for which I got 
back the URI path from the session variable, till here all fine. But without 
knowing the action for that URI name I cant forward to it. That is where I 
needed something like 		$c->forward(controller_path(uri));

Or is there another approach to this problem.

On Tue, Nov 20, 2007 at 08:30:58AM -0600, Peter Karman wrote:
> The Catalyst::Dispatcher seems to be the correct
> place to interrogate the action map for any given URL, maybe with
> get_action_by_path().

The dispatcher does produce the list of all the actions, but the process is 
complicated, if there is a way access the list of all actions that it 
produces then may be have to parse through the list to identify the right 
action.

Regards Alok




More information about the Catalyst mailing list