【问题标题】:Mojolicious render_to_string and stash values and outputMojolicious render_to_string 和存储值和输出
【发布时间】:2018-04-20 22:18:15
【问题描述】:

我在这里遗漏了一块,希望有人能指出我做错了什么。

Mojolicious 应用程序有一个路由 /export,它创建一个 href 并将该数据发送到 export.html.ep 模板以呈现为字符串(将生成电子邮件)

该模板已被剥离以进行测试:

% my $data = stash 'data';
% dumper $data;

<div></div>

导出路由函数:

use base 'Mojolicious::Controller';
...
sub export {
    my $self = shift;
    my $log  = $self->log;
    my $href = {
        foo => "bar",
        boom => [ "three", "two", "one" ],
    };

    $self->stash(data => $href);
    my $html = $self->render_to_string();
    $log->debug("html is ", { filter => \&Dumper, value => $html });
}

我的测试员是 export.t:

...
$t->get_ok("/export")->status_is(200);
print Dumper($t->tx->res->content->asset->slurp);
...

在我的日志中我看到:

html is $VAR1 = bless( do{\(my $o = 'HASH(0xad01ef0)')}, 'Mojo::ByteStream' );

在 STDOUT 上我看到了:

ok 1 - GET /export
ok 2 - 200 OK
$VAR1 = '

<div></div>
';

所以看起来 $data 没有进入模板。另外,我希望 render_to_sting 提供一个字符串而不是 Mojo::ByteStream。

如何将 $href 获取到模板中,以及如何从模板渲染中获取 text/html。

(Mojo最新版本,perl 5.22,ubuntu 16.04系统)

谢谢,

【问题讨论】:

    标签: perl mojolicious


    【解决方案1】:

    data 是 Mojolicious 中的 reserved stash value。您可以在不同的存储值中传递数据,模板会获取它。

    # app.pl
    use Mojolicious::Lite;
    get '/export' => sub {
        my $self = shift;
        $self->stash(data => { foo => "bar" });
        $self->stash(datx => { foo => "baz" });
        $self->render_to_string();
    };
    app->start;
    __DATA__
    
    @@ export.html.ep
    % my $data = stash 'data';
    % my $datx = stash 'datx';
    <div>
    bar: <%= $data->{foo} %><p/>
    baz: <%= $datx->{foo} %><p/>
    </div>
    

    $ perl app.pl get /export
    [Fri Apr 20 18:43:20 2018] [debug] Your secret passphrase needs to be changed
    [Fri Apr 20 18:43:20 2018] [debug] GET "/export"
    [Fri Apr 20 18:43:20 2018] [debug] Routing to a callback
    [Fri Apr 20 18:43:20 2018] [debug] Rendering template "export.html.ep" from DATA section
    [Fri Apr 20 18:43:20 2018] [debug] 200 OK (0.002478s, 403.551/s)
    <div>
    bar: <p/>
    baz: baz<p/>
    </div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 2016-06-26
      • 2017-11-12
      • 1970-01-01
      相关资源
      最近更新 更多