Mojolicious模板访问由Controller设置的存储值

时间:2013-11-20 01:55:06

标签: perl templates mojolicious perl-stash

我对Mojolicious很新。我试过在docs,StackOverflow和在线示例中研究这个。我还没有找到合适的答案。希望有人可以帮助我。

我有一个控制器方法/操作,应该显示用户的个人资料和帐户数据。在方法中,我从数据库中提取用户和帐户对象,并将它们推入存储区,以便模板可以访问它们。我使用Dumper来确保它们存在于存储前预渲染时间。

MyApp::User

中的控制器操作
sub show_public_profile
{
    my $self = shift;

    return $self->render_not_found if ( ! defined $self->stash('username') );

    my $user = MyApp::User->new( username => $self->stash('username') );
    my $loaded = $user->load( speculative => 1 );

    if ( defined $user && $loaded != 0 )
    {
        my $account = $user->account;

        $self->stash( user => $user, account => $account );

        $LOGGER->debug( 'pre-template stash: '. Dumper($self->stash) );

        return $self->render;
    }
    else
    {
        return $self->render_not_found;
    }
}

然而,一旦我点击了模板,我填充到藏匿处的任何内容仍然存在。

占位符/测试模板:user/show_public_profile.html.ep

% my $user    = stash 'user';
% my $account = stash 'account';
<pre>stash = <%= dumper stash %></pre>
<pre>$user = <%= dumper $user %></pre>
<pre>$account = <%= dumper $account %></pre>
<h1>Profile for <%= $user->{'username'} %></h1>

不幸的是,模板的stash版本中不存在插入的“user”和“account”值:

stash = {
  'action' => 'show_public_profile',
  'controller' => 'user',
  'mojo.captures' => {
    'action' => 'show_public_profile',
    'controller' => 'user',
    'username' => 'test_user'
  },
  'mojo.routed' => 1,
  'mojo.started' => [
    1384869014,
    663017
  ],
  'username' => 'test_user'
}

关于我做错了什么的任何线索,在这里?我使用的是完整的Mojolicious,而不是Mojolicious :: Lite,大多数示例都是参考。而且,我已经尝试了我能找到的每个示例代码的排列。我错过了什么?

谢谢!

0 个答案:

没有答案