L<Catalyst::Action> as a base class and decorate the C<execute> call in
the Action class:
- package Catalyst::Action::SayBefore;
+ package Catalyst::Action::MyAction;
+ use Moose;
+ use namespace::autoclean;
+
+ extends 'Catalyst::Action';
+
+ before 'execute' => sub {
+ my ( $self, $controller, $c, $test ) = @_;
+ $c->stash->{what} = 'world';
+ };
+
+ after 'extecute' => sub {
+ my ( $self, $controller, $c, $test ) = @_;
+ $c->stash->{foo} = 'bar';
+ };
+
+ __PACKAGE__->meta->make_immutable;
+
+Pretty simple, huh?
- use base 'Catalyst::Action';
+=head1 ACTION ROLES
- sub execute {
- my $self = shift;
- my ( $controller, $c, $test ) = @_;
+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:
+
+ package Catalyst::ActionRole::MyActionRole;
+ use Moose::Role;
+
+ before 'execute' => sub {
+ my ( $self, $controller, $c, $test ) = @_;
$c->stash->{what} = 'world';
- $self->next::method( @_ );
};
+ after 'extecute' => sub {
+ my ( $self, $controller, $c, $test ) = @_;
+ $c->stash->{foo} = 'bar';
+ };
+
1;
-If you want to do something after the action, just put it after the
-C<execute> call. Pretty simple, huh?
+and this would be used in a controller like this:
-=head1 ACTIONS
+ package MyApp::Controller::Foo;
+ use Moose;
+ use namespace::autoclean;
+ BEGIN { extends 'Catalyst::Controller::ActionRole'; }
+
+ sub foo : Does('MyActionRole') {
+ my ($self, $c) = @_;
+ }
+
+ 1;
+
+=head1 EXAMPLE ACTIONS
=head2 Catalyst::Action::RenderView
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
+=head2 Catalyst::Action::REST
+
+Provides additional syntax for dispatching based upon the HTTP method
+of the request.
-The Catalyst Core Team - see http://catalyst.perl.org/
+=head1 EXAMPLE ACTIONROLES
+
+=head2 Catalyst::ActionRole::ACL
+
+Provides ACLs for role membership by decorating your actions.
+
+=head1 AUTHORS
+
+Catalyst Contributors, see Catalyst.pm
=head1 COPYRIGHT
-This program is free software. You can redistribute it and/or modify it
-under the same terms as Perl itself.
+This library is free software. You can redistribute it and/or modify it under
+the same terms as Perl itself.
+
+=cut