Taking a leaf out of Catalyst::Action::REST's book - I've just checked in support for special methods that only get called under certain circumstances.
An example showing how a complicated action method can be broken down into smaller sections, making it clearer which code will be run, and when. sub edit : Local : FormConfig { my ( $self, $c ) = @_; my $form = $c->stash->{form}; my $group = $c->stash->{group}; $c->detach('/unauthorised') unless $c->user->can_edit( $group ); if ( $form->submitted_and_valid ) { $form->model->update( $group ); $c->response->redirect( $c->uri_for('/group', $group->id ) ); return; } elsif ( !$form->submitted ) { $form->model->default_values( $group ); } } Instead becomes... sub edit : Local : FormConfig { my ( $self, $c ) = @_; $c->detach('/unauthorised') unless $c->user->can_edit( $c->stash->{group} ); } sub edit_FORM_VALID { my ( $self, $c ) = @_; my $group = $c->stash->{group}; $c->stash->{form}->model->update( $group ); $c->response->redirect( $c->uri_for('/group', $group->id ) ); } sub edit_FORM_NOT_SUBMITTED { my ( $self, $c ) = @_; $c->stash->{form}->model->default_values( $c->stash->{group} ); } I'm just in the process of changing an application to use this, so may come across problems or scenarios I've missed - so if anyone else is interested, please checkout Catalyst-Controller-HTML-FormFu from svn and let me know how it works for you! The following method-suffixes are currently supported: _FORM_VALID Run when the form has been submitted and has no errors. _FORM_SUBMITTED Run when the form has been submitted, regardless of whether or not there was errors. _FORM_COMPLETE For MultiForms, is run if the MultiForm is completed. _FORM_NOT_VALID Run when the form has been submitted and there were errors. _FORM_NOT_SUBMITTED Run when the form has not been submitted. _FORM_NOT_COMPLETE For MultiForms, is run if the MultiForm is not completed. _FORM_RENDER For normal Form base classes, this subroutine is run after any of the other special methods, unless $form->submitted_and_valid() is true. For MultiForm base classes, this subroutine is run after any of the other special methods, unless $multi->complete() is true. _______________________________________________ HTML-FormFu mailing list HTML-FormFu@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu