Hi!

I'm experiencing a little bit of weirdness with the stash when using go(). I'd like to make sure I'm not making false assumptions. Is the called action supposed to see the same context and/or stash as the the calling action?

I'm noticing that my Root's auto-sub is getting called after calling go() and I'm ok with that, but I need to retain the original values in the stash. This is where the weirness kicks in... If I pass a stashed value to warn() in Root::auto(), the called action will see the same stash. Otherwise, the stash is empty, except for values stashed by Root::auto().

Here's my code. Notice, that if I comment out the else-branch in auto(), the template will have an empty stash, even though the called action does its thing.

in Root.pm:
sub auto :Path :Args(0) {
    my ( $self, $c ) = @_;
    warn "Root::auto()";
    if( ! $c->stash->{lang} ) {
        warn "Setting the default lingo";
        $c->stash->{lang} = $c->config->{default_language};
    }
    else {
        warn "lingo is " . $c->stash->{lang};
    }
}

in (En|Sv|Fi).pm:

sub default :Private {
    my ( $self, $c ) = @_;
    my $path = $c->req->path;
    my $lang = $self->_lang();
    $c->stash->{lang} = $lang;
    $path =~ s{\A $lang }{}msx;
    $c->go( $path, [] );
}

Any info?
Alex

_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to