[Catalyst] Multiple Chain Actions

Derek Wueppelmann dwueppel at gmail.com
Thu Jul 16 15:30:58 GMT 2009

So I've been trying to write this application that has some of the
functionality provided with a JSON interface. Originally I was using a
separate module to provide the JSON interface, but then realised that
all I was doing was forwarding all of the requests to other modules.

I then found that I could do what I wanted by using chaining and a new
view. So I created my own Catalyst::View::JSON module and used that to
provide a the JSON view of the interface. I was then going to add a
chain so that I could selectively choose which methods I would enable in
the JSON interface. I created a method like this:

sub json : Chained('/') ChainedArgs(0) {
	my ($self, $c) = @_;

	$c->stash->{view_method} = 'JSON';

I then check in my end method if I'm supposed to show the page as JSON
or my default method.

At any rate I got all of that to work and then I came up to a snag. The
big problem is that I want to be able to use the same code to perform
the action in either the JSON view or the regular view. The issue is
that I can't seem to figure out how to get a multiple rooted chain. So I
want to be able to have these URLs access the same method:


And then use the initial json chain to determine if I should show the
page or show the JSON output.

Is this something that is possible? Should I even be using Chaining for
this? Any help would be appreciated.

Derek Wueppelmann

More information about the Catalyst mailing list