NAME
   CGI::Application::Plugin::Forward - Pass control from one run mode to
   another

VERSION
   Version 1.00

SYNOPSIS
       use base 'CGI::Application';
       use CGI::Application::Plugin::Forward;

       sub setup {
           my $self = shift;
           $self->run_modes([qw(
               start
               second_runmode
           )]);
       }
       sub start {
           my $self = shift;
           return $self->forward('second_runmode');
       }
       sub second_runmode {
           my $self = shift;

           my $rm = $self->get_current_runmode;  # 'second_runmode'

       }

DESCRIPTION
   The forward method passes control to another run mode and returns its
   output. This is equivalent to calling "$self->$other_runmode", except
   that CGI::Application's internal value of the current run mode is
   updated.

   This means that calling "$self->get_current_runmode" after calling
   "forward" will return the name of the new run mode. This is useful for
   modules that depend on the name of the current run mode such as
   CGI::Application::Plugin::AnyTemplate.

   For example, here's how to pass control to a run mode named
   "other_action" from "start" while updating the value of
   "current_run_mode":

       sub setup {
           my $self = shift;
           $self->run_modes({
               start         => 'start',
               other_action  => 'other_method',
           });
       }
       sub start {
           my $self = shift;
           return $self->forward('other_action');
       }
       sub other_method {
           my $self = shift;

           my $rm = $self->get_current_runmode;  # 'other_action'
       }

   Note that forward accepts the *name* of the run mode (in this case
   *'other_action'*), which might not be the same as the name of the method
   that handles the run mode (in this case *'other_method'*)

   You can still call "$self->other_method" directly, but
   "current_run_mode" will not be updated:

       sub setup {
           my $self = shift;
           $self->run_modes({
               start         => 'start',
               other_action  => 'other_method',
           });
       }
       sub start {
           my $self = shift;
           return $self->other_method;
       }
       sub other_method {
           my $self = shift;

           my $rm = $self->get_current_runmode;  # 'start'
       }

   Forward will work with coderef-based runmodes as well:

       sub setup {
           my $self = shift;
           $self->run_modes({
               start         => 'start',
               anon_action   => sub {
                   my $self = shift;
                   my $rm = $self->get_current_runmode;  # 'anon_action'
               },
           });
       }
       sub start {
           my $self = shift;
           return $self->forward('anon_action');
       }

METHODS
 forward
   Runs another run mode passing any parameters you supply. Returns the
   output of the new run mode.

       return $self->forward('run_mode_name', @run_mode_params);

AUTHOR
   Michael Graham, "<[email protected]>"

BUGS
   Please report any bugs or feature requests to
   "[email protected]", or through the web
   interface at <http://rt.cpan.org>. I will be notified, and then you'll
   automatically be notified of progress on your bug as I make changes.

ACKNOWLEDGEMENTS
   Thanks to Mark Stosberg for the idea and...well...the implementation as
   well.

COPYRIGHT & LICENSE
   Copyright 2005 Michael Graham, All Rights Reserved.

   This program is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself.