[Catalyst] $c->visit without calling end()

Bill Moseley moseley at hank.org
Sat Nov 13 02:54:36 GMT 2010


I have a number of chained actions that use an end() method that generates a
json response in a view.

Another developer added an action to support a POST, and at the end of the
action they call $c->visit on a few actions to build up a response -- I
assume to avoid making a few extra ajax requests.  $c->visit does a full
dispatch so auto and end methods are called for each visit, plus for the
original action.  But, because of the chained actions, $c->visit makes
running the requests very simple.

Yes, normally the POST would be followed by a redirect, but this POST is a
file upload in an iframe an a json response is desired.  But, doing this
partial re-dispatch has also come with GET requests.


Any tricks to do a $c->visit type of call but w/o doing a full dispatch,
that is, without calling the auto and end actions?

I suppose I could do something like this, but it's not very pretty.

    for my $action_name ( @action_names_to_run ) {
        local $c->req->{method} =3D 'GET';
        local $c->request->{arguments} =3D [];
        local $c->request->{captures}  =3D [ $item_id ];

        my $action =3D $c->controller->action_for( $action_name );
        $action =3D $c->dispatcher->expand_action($action);
        local $c->{action} =3D $action;

        $action->dispatch( $c );
    }


-- =

Bill Moseley
moseley at hank.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20101112/68288=
df2/attachment.htm


More information about the Catalyst mailing list