[Catalyst] Re: Private Chained Actions?
Jonathan Rockway
jon at jrock.us
Fri Jun 20 21:12:47 BST 2008
* On Fri, Jun 20 2008, Marc Sebastian Pelzer wrote:
>>> You need a screwdriver, not a hammer.
>>
>> sub hello_setup : Private {
>> my ($self, $c) = @_
>> $c->stash->{setup} = 'done';
>> }
>>
>> sub hello : Private {
>> my ($self, $c) = @_
>> $c->forward('hello_setup'); # <---------
>> $c->res->body('hello! setup is ' . $c->stash->{setup});
>> }
>>
>> sub index : Path : Args(0) {
>> my ($self, $c) = @_
>> $c->detach('hello');
>> }
>
>
> thanks for the hint. Thats what I'm doing right now. I thought that
> there may be a more elegant way of doing this. Especially for a
> longer/ more complex chained setup :) Also, doing it this way it does
> not look not too nice in the dispatcher path in the debug logfile -
> hello() comes before hello_setup() :-|
Yeah, that's ugly. What you really want are method modifiers:
package MyApp::Controller::Foo;
use Moose;
BEGIN { extends 'Catalyst::Controller' };
sub main_page :Path Args(0) {
my ($self, $c) = @_;
$self->hello($c);
}
sub hello {
my ($self, $c) = @_;
$c->res->body('hello! setup is'. $c->stash->{setup});
}
before hello => sub {
my ($self, $c) = @_;
$c->stash->{setup} = 'done';
};
1;
You can also say:
before [qw/method1 method2 method3 .../] => sub { ... }
to do something before a bunch of methods at once. See "perldoc Moose"
for details.
Regards,
Jonathan Rockway
--
print just => another => perl => hacker => if $,=$"
More information about the Catalyst
mailing list