[Catalyst] why no $c->action_class ?

Matt S Trout dbix-class at trout.me.uk
Sun Jul 20 02:47:48 BST 2008


On Wed, Jul 16, 2008 at 03:47:43PM +0200, Dami Laurent (PJ) wrote:
> Hi all,
> 
> Catalyst lets users build their own base classes for Request, Response,
> Dispatcher , etc. (cf. methods $c->request_class, $c->dispatcher_class,
> etc.).
> 
> Question : why is there no such mechanism for setting my own base class
> for Action ?
> 
> I found a way to do it as follows :
> 
>     package My::App::Base::Controller;
>     use My::App::Base::Action;
>    __PACKAGE__->_action_class('My::App::Base::Action');
> 
> Another way would be to override the "register_actions" and/or
> "create_action" method in My::App::Base::Controller.
> 
> However, both ways make me fell a bit uncomfortable because they rely on
> Catalyst internals, not on any public API.
> 
> I know that there is a way to set action classes on a per-method basis,
> by using the :ActionClass attribute, but it would be tedious to do this
> on every method of every Controller. Furthermore, I want to keep the
> :ActionClass mechanism for specific cases where I need a specific
> subclass of My::App::Base::Action.
> 
> So, coming back to my question : is there any good reason why we don't
> have a $c->action_class method in Catalyst ?

Yes. It's per-controller. The two methods you already described are
correct. _action_class is _prefixed to indicate it shouldn't be called
from outside the class, not that you shouldn't override it.

register_actions and create_action are both not prefixed because they're
not only meant to be wrapped but callable from outside the object.

If you feel that this isn't clear, a doc patch would be much appreciated.

-- 
      Matt S Trout       Need help with your Catalyst or DBIx::Class project?
   Technical Director                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://chainsawblues.vox.com/            http://www.shadowcat.co.uk/servers/



More information about the Catalyst mailing list