[Catalyst] RFC: Catalyst::Controller::RHTMLO

Jason Gottshall jgottshall at capwiz.com
Tue Feb 3 18:37:11 GMT 2009


Zbigniew Lukasiak wrote:
> On Mon, Feb 2, 2009 at 7:59 PM, Jason Gottshall <jgottshall at capwiz.com> wrote:
>> Zbigniew Lukasiak wrote:
>>> Maybe I am just being lazy now - but before I start digging too deep -
>>> did you take into accout that some forms require loading stuff from
>>> the DB?  It can happen in to cases:
>>>
>>> 1) loading SELECT choices lists - this one is easy - because it can be
>>> done at initialisation as it does not depend on th request.
>>>
>>> 2) loading related forms for one to many relations - where you don't
>>> know how many related forms you need until you have the main object -
>>> i.e. until request time.  See Rose::HTML::Form::Repeatable.
>> Yes, I'm actually thinking of doing
>>
>>  my $form = $class->new( app => $c );
>>
>> so that the form can access model-related stuff as necessary. (This is safe
>> because RHTMLO automatically weakens any value passed to ->app). Would
>> something like that address your cases?
> 
> Hmm - I thought you mentioned something about caching the form objects
> between requests?  Passing $c to the creator means you create the
> forms on per request basis.   If you like the caching idea - then what
> would be needed is a kind of two phase initialisation.  First you
> create a prototype - and then you add the necessary repeatable
> sub-forms on per request basis to it (of course this is only needed if
> you use repeatable sub-forms).

Yeah, I gave up on caching for now, mostly due to concerns about form 
mutability. And it's a premature optimization that will be harder to 
code for given the other factors I'm dealing with, so I don't want to 
think about it yet.

The example you cite raises precisely one of my concerns: if you start 
with a cached "prototype" form and add subforms per-request, you have to 
make sure you include some sort of cleanup or reset routine to clear out 
the temporary subforms from the previous request. By extension, many 
various temporary modifications to the form structure (other than merely 
adding subforms) are possible, so we'd need to develop some kind of 
generic mechanism for removing these modifications. My brain isn't ready 
to tackle that problem right now, so I'm blissfully ignoring it :-)


-- 
Jason Gottshall
jgottshall at capwiz.com




More information about the Catalyst mailing list