NAME
Catalyst::Manual::Actions - Catalyst Reusable Actions
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.
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 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').
WRITING YOUR OWN ACTIONS
Implementing the action itself is almost as easy. Just use Catalyst::Action as a base class and decorate the 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 execute
call. Pretty simple, huh?
ACTIONS
Catalyst::Action::RenderView
This is meant to decorate end actions. It's similar in operation to Catalyst::Plugin::DefaultEnd, but allows you to decide on an action level rather than on an application level where it should be run.
AUTHOR
The Catalyst Core Team - see http://catalyst.perl.org/
COPYRIGHT
This program is free software. You can redistribute it and/or modify it under the same terms as Perl itself.