[Catalyst] Generate a URL for a given action

John Napiorkowski jjn1056 at yahoo.com
Thu Aug 31 04:07:43 CEST 2006


Hi,

I'm sure this is a no brainer but I just can't find it anywhere.  Basically what I am trying to find out is if there is a programmatic way to discover the url for a given action in controller just by using the action name.  Here is the example I am trying to deal with:

package myapp::templates

##n ormal controller setup stuff

sub templates :Chained('/') CaptureArgs(0)
{
    ## Get the templates list from the model
}

sub list :Chained('templates') PathPart('') Args(0)
{
    ## Show a list of all templates found by the template action
}

sub template :Chained('templates') PathPart('') CaptureArgs(1)
{
    ## Retrieve info about a particular template
}

sub view :Chained('template') PathPart('') Args(0)
{
    ## View the template found by the template action
}

sub edit :Chained('template') PathPart('edit') Args(0)
{
    my ($self, $c) = @_;

    if( $c->request->method eq 'GET' )
    {
        ##Just show the Form
    }
    elsif($c->request->method eq 'POST')
    {
        ## Do some form processing and if everything saves okay...
        $c->response->redirect("/templates");
    }
}

Basically I'd like to replace the hardcoded path in the redirect("/templates") since I am not too sure where this app will eventually sit in the web hierarchy.  Now, the docs for $c->get_uri says you can pass an action to it to get the url, which seems to me what I want.  If I did:

$c->response->redirect($c->uri_for('templates'));

Would this work correctly even if this controller ends up deeply nested?

--john





More information about the Catalyst mailing list