[Catalyst] Loading template according to request path

Matt Whipple matt at mattwhipple.com
Tue Aug 11 19:08:44 GMT 2009


Eden Cardim wrote:
> On Tue, Aug 11, 2009 at 2:15 PM, Matt Whipple<matt at mattwhipple.com> wrote:
>   
>> Thanks everyone for your input, I'm certainly gathering that there is
>> nothing preexisting that does what I'm looking to do.  I'll continue to
>> clean up my version and throw it on CPAN if it seems appealing enough.  As a
>> quick overview the basic premise is a more direct link from the path to the
>> template which would be used for those times when the URI path determines
>> presentation after passing through a reusable action handler which tailors
>> content (and doesn't necessarily have to worry about the template
>> selection).  This is presently done in the auto action so that overriding
>> the behavior is natural and any extended logic can be handled when and where
>> desired.
>>     
>
> That's precisely what chained actions are for:
>
> sub content : Chained('/') CaptureArgs(0) PathPart('content/as') {
>     my($self, $c) = @_;
>     $c->stash->{data} = $c->model('Content');
> }
>
> # /content/as/html -- renders root/content/as/html.tt
> sub html : Chained('content') Args(0) {}
>
> # /content/as/text -- renders root/content/as/text.tt
> sub text : Chained('content') Args(0) {}
>
> # /content/as/graph
> # doesn't process a template at all as long as View::SVG sets $c->res->body
> sub graph : Chained('content') Args(0) {
>     my($self, $c) = @_;
>     $c->forward('View::SVG'); # sets res->body, res->content_type, etc.
> }
>
> sub whatever : Chained('content') Args(0) { #etc... }
>
> # insert jshirley's end action here
>
> what's missing?
>   
I considered using a chain, but figured sticking to my initial idea 
offers a more self-contained, flexible solution which potentially frees 
the controller actions to focus more on distinct processing and less on 
any indistinctly retrieved result destination.   Perhaps a more simple 
expression of what I'm looking to do is to override the TT View default 
of going to a template named according to the action to one named 
according to the path (with a little extra DWIMmery).  Consider, for 
example, an application for which you may want to use customized 
templates for certain edge cases in an application.  Rather than having 
to touch the code at all, the template could be dropped in place in the 
right path by a designer and automatically used by the application.  For 
now I'm going to try it and see if it's useful, counter-productive, or 
somewhere in the middle and then either release it for consumption or 
bury it and disavow any responsibility for its creation.



More information about the Catalyst mailing list