[Catalyst] Loading template according to request path
Richard Thomas
ret at mac.com
Fri Aug 14 08:06:23 GMT 2009
On 13/08/2009, at 7:56 PM, Eden Cardim wrote:
> The problem with that approach is that your view is now heavily
> coupled to your controller semantics. Whenever the semantics change,
> you'll run into refactor hell making the template paths match.
In theory? Yes. In practice? Mmmm. The original question was about
mapping template paths to request paths. It certainly sounds like the
OP's application is like mine, very hierarchical in this sense. This
'Cascading Templates' or over-ride approach is very powerful in that
scenario.
> Also, if you have arguments in your paths, say, /foo/*/bar/*, you'll
> be
> allowing the addition of per-record customization templates, which
> leads to refactor hell once again when your underlying model changes.
> Of course, this problem also exists with the traditional
> template-by-action-name approach. This is why, theoretically, views
> are supposed to be dispatch-agnostic and it's specifically the
> controller's job to tell the view how to render data.
If you look at the original code, you'll notice the use of the $c-
>stash->{reportfolders} in the auto handler, rather than directly
referring to $c->req->path in TT.pm
This does provide a means to manipulate the template paths a bit more
to allow for arguments or special cases in the path if need be. I
didn't expand on it in the previous message, but that's the purpose of
it.
The beauty of this approach - for us, YMMV - is that the more you
componentize the templates, the more easily you can customise the
output/behaviour for certain scenarios, without resorting to templates
that look like PHP (full of display logic conditionals, etc) or adding
display code/logic to your controllers (equally horrific).
RET
______________________________________________________
Don't anthropomorphize computers. They hate that.
http://homepage.mac.com/ret
More information about the Catalyst
mailing list