2

我对 Mojolicious 还很陌生。我尝试在文档、StackOverflow 和在线示例中对此进行研究。我还没有找到合适的答案。希望有人可以帮助我。

我有一个控制器方法/操作,应该显示用户的个人资料和帐户数据。在该方法中,我从数据库中提取 User 和 Account 对象,并将它们推送到 stash 中,以便模板可以访问它们。我曾经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 = {
  '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。而且,我已经尝试了我能找到的示例代码的每一种排列方式。我错过了什么?

谢谢!

4

0 回答 0