Controllerモジュールで$cをとる方法

C::C::FormBuilderがベストプラクティスって教えてもろたんやけど、$cはActionでとってるなぁ。

http://search.cpan.org/src/NUFFIN/Catalyst-Controller-BindLex-0.03/lib/Catalyst/Controller/BindLex.pm

このモジュールやと、

sub _get_c_obj {
    # used to find $c from some catalyst action called long long ago
    # needed in the attribute handlers
    my $level = shift; # how many levels to go up the stack

    for ( my $i = 0; $i < 10; $i++ ) {
        my $c = ( eval { Devel::Caller::caller_args($level + $i) } )[1]; # ( $self, $c )[1]
        return $c if Scalar::Util::blessed($c) and $c->isa("Catalyst"); # FIXME Catalyst::Context ?
    }

    die "panic: Can't find \$c object";
}

こんな感じで、コントローラ内で、無理矢理とってはるようやなぁ。
同じようなこと、RTのパフォーマンスあげようとした時にしたなぁ、そういえば。

あと、アクションを理解してなさすぎやなぁ。修行が足りないなぁ。


追記

なんか、この関数そのまま試したけど、とれんかったっちゃ。