[Catalyst] Any recommendations for multiple forms in catalyst (have been using HTML::FormFu)?

kakimoto at tpg.com.au kakimoto at tpg.com.au
Tue Jul 15 14:13:34 BST 2008


hi 
 I was pretty successful in keeping things simple.

 I figured I d' keep all steps that needed a form to be generated (ie
for data entry) to "sub create".

Then, at the very end when I am done getting all the data (from forms
shown on the webpage), I would then
redirect/forward/detach to another method, "sub save_complete_listing".

sub create :Local  :FormMethod('_get_dynamic_form') { 
    my ($self, $c) = @_;

    # Set the template
    my $effective_template = 'listings/create.tt2';
    $c->stash->{template} = $effective_template;
    my $loanType = lc($c->request->param('loanType'));

    my $step = $c->flash->{step};
    $c->log->debug("Current operation: $step");

    if (defined($step) and $step =~ m/\w+/)
    {
        my $form_submission_success = $c->stash->{'form'}->submitted();
        if ($form_submission_success) {

            if ($step eq 'first_step')
            {
               ....


             # now, set the next step.
              $c->flash->{'step'} = 'second_step';
           } 
           elsif ($step eq 'second_step')
           {
             ....

  
             # now, set the next step.
              $c->flash->{'step'} = 'third_step';

           }
           elsif ($step eq 'third_step')
           {
             ....

  
             # now, we have acquired all data we need from steps one and
two.
             # we do a redirect/forward/detach to save the values. 
Should go to 'sub save_complete_listing'

             $c->detach/ $c->res->forward/$c->redirect   # all failed.
           }


 A few questions:

1) What is the difference between Detach, forward and redirect?? I read
through the docos and they are under explained.
   Refered to
http://search.cpan.org/~mramberg/Catalyst-Runtime-5.7014/lib/Catalyst.pm#___top

    Correct me if i am wrong:
    a) $c->forward - control will be passed to whatever target it is
defined with. Once the target is finished with execution, control will
go back to where it was "forwarded" from

   b) $c->detach - same as forward BUT control does not go back to where
it was "detached" from.

   c) $c->res->redirect - someone please give me an idea cause my
initial thoughts was that it should resemble forward

2. When we do a $c->forward/$c->detach/$c->res->redirect,  would
     a) $c still be defined??
     b) $c->stash contents still be defined??
     c) $c->flash contents still be defined??

  For stash and flash, I noticed they got wiped off. Particularly,
$c->stash/flash->{'form'}.
To be extra safe, before the $c->forward/$c->detach/$c->res->redirect,
I even explicitly did a "$c->flash->{'form'} = $c->stash->{'form'}" and
 yet the values have dissappeared.


 Please help.

Thanks



More information about the Catalyst mailing list