On Tue, Jul 15, 2008 at 11:13:34PM +1000, [EMAIL PROTECTED] wrote: > hi > I was pretty successful in keeping things simple. > > > 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. > }
Have not been following that closely, but that looks complicated. I would do something like this with Form::Processor: sub first_step : Local { my ( $self, $c ) = @_; return $c->post_redirect( 'second_step' ) if $c->update_from_form; } sub second_step : Local { my ( $self, $c ) = @_; return $c->redirect( 'first_step' ) unless $c->session->{first_step}; return $c->post_redirect( 'third_step' ) if $c->update_from_form; } sub third_step : Local { my ( $self, $c ) = @_; return $c->redirect( 'second_step' ) unless $c->session->{second_step}; return $c->post_redirect( '/home', 'Thanks for your order' ) if $c->update_from_form: } My forms are classes, thus each form class knows to save their data in the session (except third_step which writes all the form data). They also know how to pre-populate the form from a previous submission (for example, if someone goes from form three back to form one. update_from_form() knows the form class from the action name, and $c->redirect and $c->post_redirect are simple short-cut methods to build the redirect and localize any messages that end up in flash. -- Bill Moseley [EMAIL PROTECTED] Sent from my iMutt _______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/