Scroll to navigation

Catalyst::Controller::ActionRole(3pm) User Contributed Perl Documentation Catalyst::Controller::ActionRole(3pm)


Catalyst::Controller::ActionRole - (DEPRECATED) Apply roles to action instances


version 0.17


    package MyApp::Controller::Foo;
    use Moose;
    use namespace::autoclean;
    BEGIN { extends 'Catalyst::Controller::ActionRole' }
    sub bar : Local Does('Moo') { ... }


This module allows one to apply Moose::Roles to the "Catalyst::Action"s for different controller methods.

For that a "Does" attribute is provided. That attribute takes an argument, that determines the role, which is going to be applied. If that argument is prefixed with "+", it is assumed to be the full name of the role. If it's prefixed with "~", the name of your application followed by "::ActionRole::" is prepended. If it isn't prefixed with "+" or "~", the role name will be searched for in @INC according to the rules for role prefix searching.

It's possible to apply roles to all actions of a controller without specifying the "Does" keyword in every action definition:

    package MyApp::Controller::Bar
    use Moose;
    use namespace::autoclean;
    BEGIN { extends 'Catalyst::Controller::ActionRole' }
        action_roles => ['Foo', '~Bar'],
    # Has Catalyst::ActionRole::Foo and MyApp::ActionRole::Bar applied.
    # If MyApp::ActionRole::Foo exists and is loadable, it will take
    # precedence over Catalyst::ActionRole::Foo.
    # If MyApp::ActionRole::Bar exists and is loadable, it will be loaded,
    # but even if it doesn't exist Catalyst::ActionRole::Bar will not be loaded.
    sub moo : Local { ... }

Additionally, roles can be applied to selected actions without specifying "Does" using "action" in Catalyst::Controller and configured with "action_args" in Catalyst::Controller:

    package MyApp::Controller::Baz;
    use Moose;
    use namespace::autoclean;
    BEGIN { extends 'Catalyst::Controller::ActionRole' }
        action_roles => [qw( Foo )],
        action       => {
            some_action    => { Does => [qw( ~Bar )] },
            another_action => { Does => [qw( +MyActionRole::Baz )] },
        action_args  => {
            another_action => { customarg => 'arg1' },
    # has Catalyst::ActionRole::Foo and MyApp::ActionRole::Bar applied
    sub some_action : Local { ... }
    # has Catalyst::ActionRole::Foo and MyActionRole::Baz applied
    # and associated action class would get additional arguments passed
    sub another_action : Local { ... }



This class attribute stores an array reference of role prefixes to search for role names in if they aren't prefixed with "+" or "~". It defaults to "[ 'Catalyst::ActionRole::' ]". See "role prefix searching".


This attribute stores an array reference of role names that will be applied to every action of this controller. It can be set by passing a "action_roles" argument to the constructor. The same expansions as for "Does" will be performed.



Gathers the list of roles to apply to an action with the given %action_args.


As of version 5.90013, Catalyst has merged this functionality into the core Catalyst::Controller. You should no longer use it for new development and we recommend switching to the core controller as soon as practical.


Roles specified with no prefix are looked up under a set of role prefixes. The first prefix is always "MyApp::ActionRole::" (with "MyApp" replaced as appropriate for your application); the following prefixes are taken from the "_action_role_prefix" attribute.


Florian Ragwitz <>


This software is copyright (c) 2009 by Florian Ragwitz.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.


  • Karen Etheridge <>
  • Tomas Doran <>
  • Hans Dieter Pearcey <>
  • Alex J. G. BurzyXski <>
  • Jason Kohles <>
  • William King <>
  • NAKAGAWA Masaki <>
  • Joenio Costa <>
  • John Napiorkowski <>
2020-09-27 perl v5.30.3