[Catalyst] I am misunderstanding something about Private actions
Jason Kohles
email at jasonkohles.com
Mon Jan 7 16:19:59 GMT 2008
On Jan 5, 2008, at 6:48 PM, Joe Landman wrote:
> Hi folks:
>
> Thought I had this nailed, but it looks like I really didn't
> understand it as I should have.
>
> Here is the problem. I want to forward to some private actions to
> simplify the application (and avoid repeating myself). I want to be
> able to do this from any controller in the code. So in reading the
> manual, I thought I was supposed to do
>
> $c->forward('MyApp::Root::do_something');
>
Close, but it should be $c->forward( 'MyApp::Root', 'do_something' );
From Catalyst.pm:
$c->forward( $class, $method, [, \@arguments ] )
Forwards processing to another action, by its private name. If
you give
a class name but no method, "process()" is called. You may also
optionally pass arguments in an arrayref. The action will
receive the
arguments in @_ and "$c->req->args". Upon returning from the
function,
"$c->req->args" will be restored to the previous values.
Any data "return"ed from the action forwarded to, will be
returned by
the call to forward.
my $foodata = $c->forward('/foo');
$c->forward('index');
$c->forward(qw/MyApp::Model::DBIC::Foo do_stuff/); #
<--------
$c->forward('MyApp::View::TT');
> and not
>
> $c->forward('/do_something');
>
> The latter works, the former does not. Is this intended? Are both
> supposed to work?
>
> On a related note, I like naming my internal methods with an
> underscore up front. Yeah, maybe not the best practice these days,
> but call it an old habit. What I noticed was that private methods
> named _do_something didn't seem to show up in the private list.
> Confused me a bit. Should I avoid that practice with Catalyst?
> Just name them INTERNAL_METHOD_do_something or something like
> that? Well, you get the idea ...
>
There is a configuration option you can set to not have actions
starting with an underscore supressed (MyApp->config-
>{ 'show_internal_actions' } = 1), but if you enable it you will also
get all of Catalyst's internal actions (_DISPATCH, _BEGIN, _AUTO,
_ACTION, _END)
Besides, if you are forwarding to them, they aren't really internal,
are they?
--
Jason Kohles, RHCA RHCDS RHCE
email at jasonkohles.com - http://www.jasonkohles.com/
"A witty saying proves nothing." -- Voltaire
More information about the Catalyst
mailing list