[Catalyst] Invoke *complete* subrequests in Catalyst?

Matt S Trout dbix-class at trout.me.uk
Wed Sep 20 16:36:46 CEST 2006


Nate Wiger wrote:
> Matt S Trout wrote:
>> Nate Wiger wrote:
>>> I'm building an AJAX app with FormBuilder, and want to use it to embed 
>>> multiple forms in a page (each of which would be linked to a different 
>>> action and submitted using JQuery). I've found I can do this, but I've 
>>> had to make changes to the FB plugin so that it only instantiates an 
>>> object on a call to $c->form, and doesn't use prepare() to do so. This 
>>> then requires a bit of internal magic to work both normally and in 
>>> subrequest mode.
>>>
>>> Other ideas?
>> Actually, yes.
>>
>> MAKE IT A CONTROLLER BASE CLASS LIKE I ALREADY SAID
>>
>> You just proved *perfectly* why this is a really stupid thing to have as a 
>> plugin ...
> 
> Never said I wasn't going to do that... but it doesn't really solve the 
> problem. I've played with the base class, AFAICT it has the issue that 
> you have to say something like this:
> 
>     sub myform : Local Form {
>         my($self,$c) = @_;
>         my $form = $c->form;
>         $form->etc(...);
>         $c->stash->{form_output} = $form->render;
>     }
> To get the form instantiated and rendered. In the normal case, having it 
> as a plugin makes sense because:
> 
>     - The form config is automatically resolved per the $c->action
>     - The form is loaded during Catalyst preparation
>     - The form is rendered automatically via Catalyst View::Whatever

So in your controller base class include an _parse_Form_attr method that sets 
it up as :ActionClass('+Catalyst::Controller::FormBuilder::Action') or similar.

Then that custom action class can wrap the execute phase and do any setup 
based on $c->action required.

This also has the advantage of potentially allowing more than one form later.

> I'm not sure if you've actually tried to use the FormBuilder plugin or 
> not. If you can show/hint/link at how these items could be done via a 
> base class, and auto-invoked during prepare(), that would be helpful. So 
> far I can't find any decent documentation on controller base classes.

Best bet is to have a read of Catalyst::Base and see how it does stuff.

-- 
      Matt S Trout       Offering custom development, consultancy and support
   Technical Director    contracts for Catalyst, DBIx::Class and BAST. Contact
Shadowcat Systems Ltd.  mst (at) shadowcatsystems.co.uk for more information

+ Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +



More information about the Catalyst mailing list