=head1 NAME
-Catalyst::Manual::Actions - Catalyst Reusable Actions
+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.
+Catalyst, how such actions 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:
+This is pretty simple. Actions work just like the normal dispatch
+attributes you are used to, like Local or Private:
- sub Hello :Local :ActionClass('SayBefore') {
+ 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').
+section we'll show you how to implement it. If you want it in a
+namespace other 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
package Catalyst::Action::MyAction;
use Moose;
use namespace::autoclean;
-
+
extends 'Catalyst::Action';
before 'execute' => sub {
$c->stash->{what} = 'world';
};
- after 'extecute' => sub {
+ after 'execute' => sub {
my ( $self, $controller, $c, $test ) = @_;
$c->stash->{foo} = 'bar';
};
=head1 ACTION ROLES
-You can only have one action class per action, which can be somewhat inflexible.
+You can only have one action class per action, which can be somewhat
+inflexible.
The solution to this is to use L<Catalyst::Controller::ActionRole>, which
would make the example above look like this:
$c->stash->{what} = 'world';
};
- after 'extecute' => sub {
+ after 'execute' => sub {
my ( $self, $controller, $c, $test ) = @_;
$c->stash->{foo} = 'bar';
};
-
+
1;
and this would be used in a controller like this:
=head2 Catalyst::Action::RenderView
-This is meant to decorate end actions. It's similar in operation to
+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.