[Catalyst] RFC: Reusable actions

Sebastian Riedel sri at oook.de
Thu Apr 6 12:27:07 CEST 2006


Now that i'm recovering from my World of Warcraft addiction i think  
it's time to move web development with Catalyst to the next level. :)

We'll start by introducing reusable actions.

The Action(class) attribute will attach before() and after() methods  
to the action sub, in a very aop-ish way.
begin and after are just placeholders, there may be more specific  
methods for param validation and the like.

Here is a first mockup to get the idea:

     package MyApp::Controller::Users;

     use base 'Catalyst::Controller';

     sub default : Private {
         my ( $self, $c ) = @_;
         $c->res->body('Welcome to the user manager!');
     }

     sub add : Local : Action('Add') {
         my ( $self, $c ) = @_;
         $c->stash->{model} = $c->model('Users');
     }

     1;


     package Catalyst::Action::Add;

     use base 'Catalyst::Action';

     #
     # Unused in this example, but useful to filter request
     # data before action gets executed
     #
     sub before {}

     sub after {
         my ( $self, $c, @args ) = @_;
         my $model = $c->stash->{model};

         # do stuff, validate args...

         $model->add(...);
     }

     1;


Multiple Acvtion() attributes for a single action are also possible.

     sub foo : Path('/bar') : Action('Bar') : Action('Baz') {}


The Catalyst::Action namespace is already taken, so we need a better  
alternative, suggestions welcome!!!


--
sebastian




More information about the Catalyst mailing list