Catalys...:Actions(3)
π NAME π
Catalyst::Manual::Actions β Catalyst Reusable Actions. This is the Catalys...:Actions(3) page, filed under User Contributed Perl Documentation, and itβs all about making Catalyst actions reusable and cute. π«Ά
β¨ DESCRIPTION β¨
This part of the manual is literally about the reusable action system in Catalyst: how these actions work, descriptions of some existing ones, and how to write your own. Reusable actions are attributes on Catalyst methods that let you decorate your method with functions running before or after the method call. Itβs giving βcommonly used action patterns,β but you still get full freedom to customize them. Obsessed. π
πΈ USING ACTIONS πΈ
Okay so 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') {
$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 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'). Slay. β¨
π 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::MyAction;
use Moose;
use namespace::autoclean;
extends 'Catalyst::Action';
before 'execute' => sub {
my ( $self, $controller, $c, $test ) = @_;
$c->stash->{what} = 'world';
};
after 'execute' => sub {
my ( $self, $controller, $c, $test ) = @_;
$c->stash->{foo} = 'bar';
};
__PACKAGE__->meta->make_immutable;
Pretty simple, huh? π
π¦ ACTION ROLES π¦
You can only have one action class per action, which can be somewhat inflexible. Ngl, kinda limiting.
The solution to this is to use 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';
};
after 'execute' => sub {
my ( $self, $controller, $c, $test ) = @_;
$c->stash->{foo} = 'bar';
};
1;
and this would be used in a controller like this:
package MyApp::Controller::Foo;
use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Controller::ActionRole'; }
sub foo : Does('MyActionRole') {
my ($self, $c) = @_;
}
1;
π EXAMPLE ACTIONS π
Catalyst::Action::RenderViewβ This is meant to decorate end actions. Itβs similar in operation toCatalyst::Plugin::DefaultEnd, but allows you to decide on an action level rather than on an application level where it should be run. Iconic behavior, fr fr. πCatalyst::Action::RESTβ Provides additional syntax for dispatching based upon the HTTP method of the request. RESTie bestie energy. π₯
π§ EXAMPLE ACTIONROLES π§
Catalyst::ActionRole::ACLβ Provides ACLs for role membership by decorating your actions. Cute and access-controlled. π
π AUTHORS π
Catalyst Contributors, see Catalyst.pm. Thatβs the whole author situation, bestie. π«Ά
π COPYRIGHT π
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. π
okay bestie, thatβs the whole page β mwah! π This oneβs source/version is perl v5.42.0, dated 2024-03-23 (for Catalys...:Actions(3)). π
π¦ where this page comes from
- opensuse-leap 16.0: perl-Catalyst-Manual 5.9013-bp160.1.11 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms