X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Manual.git;a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FActions.pod;fp=lib%2FCatalyst%2FManual%2FActions.pod;h=1952b2b195cf5cc4b7fd4b6803b56245b197325a;hp=461945e263efb665cc7aaa53c9e9f327f7fee577;hb=bbddff000787154dd9130f45634da8ef06529d86;hpb=614b484ca966389470528db752d8e73a1ac6ebdc diff --git a/lib/Catalyst/Manual/Actions.pod b/lib/Catalyst/Manual/Actions.pod index 461945e..1952b2b 100644 --- a/lib/Catalyst/Manual/Actions.pod +++ b/lib/Catalyst/Manual/Actions.pod @@ -33,23 +33,62 @@ Implementing the action itself is almost as easy. Just use L as a base class and decorate the C 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, 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 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 @@ -57,11 +96,24 @@ This is meant to decorate end actions. It's similar in operation to L, 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