=head1 NAME

Catalyst::Manual::Actions - Catalyst Reusable Actions 

=head1 DESCRIPTION

This section of the manual describes the reusable action system in
Catalyst, how they work, descriptions of some existing ones, and how to
write your own.  Reusable actions are attributes on Catalyst methods
that allow you to decorate your method with functions running before or
after the method call.  This can be used to implement commonly used
action patterns, while still leaving you full freedom to customize them.

=head1 USING ACTIONS

This is pretty simple. It works just like the normal dispatch attributes
you are used to, like Local or Private:

  sub Hello :Local :ActionClass('SayBefore') { 
	$c->res->output( 'Hello '.$c->stash->{what} );
  }

In this example, we expect the SayBefore action to magically populate
stash with something relevant before C<Hello> is run.  In the next
section we'll show you how to implement it. If you want it in another
namespace than Catalyst::Action you can prefix the action name with a
'+', for instance '+Foo::SayBefore', or if you just want it under your
application namespace instead, use MyAction, like MyAction('SayBefore').

=head1 WRITING YOUR OWN ACTIONS

Implementing the action itself is almost as easy. Just use
L<Catalyst::Action> as a base class and decorate the C<execute> call in
the Action class:

  package Catalyst::Action::SayBefore;

  use base 'Catalyst::Action';

  sub execute {
    my $self = shift;
    my ( $controller, $c, $test ) = @_;
    $c->stash->{what} = 'world';
    $self->NEXT::execute( @_ );
  };

  1;

If you want to do something after the action, just put it after the
C<execute> call. Pretty simple, huh?

=head1 ACTIONS

=head2 Catalyst::Action::RenderView

This is meant to decorate end actions. It's similar in operation to 
L<Catalyst::Plugin::DefaultEnd>, but allows you to decide on an action
level rather than on an application level where it should be run.

=head1 AUTHOR

The Catalyst Core Team - see http://catalyst.perl.org/

=head1 COPYRIGHT

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