为什么内容在Mojo :: Template中被串联?

时间:2019-01-14 08:08:59

标签: perl mojolicious

在Mojolicious应用程序中,我使用模板来生成XML,以向Exchange Web Services发送请求。

在一种情况下,我必须一个接一个地执行两个模板=>请求周期,并且看起来像在第二个调用中,第一个调用的内容与第二个调用的内容串联在一起,从而使结果不正确。 / p>

如果我在渲染完东西后将存储区的mojo.content字段设置为空字符串,则可以解决此问题(请参见第一个代码段中的“为什么需要”。

那是为什么?代码如下(为清晰起见,希望略过)。

在一个包装中:

use Mojo::Base 'Mojolicious::Plugin';

sub user_location {
    my ($self, $c, $name) = @_;

    my $url = Mojo::URL->new($c->app->config->{root});
    my $xml = $c->render_to_string(template => 'xml/whois', format => "xml", name => $name);

    #----------------------
    # WHY IS THIS NEEDED?
    #----------------------
    $c->stash->{'mojo.content'} = undef;

    my $ua  = Mojo::UserAgent->new();
    my $tx = $ua->post($url => {'Content-Type' => 'text/xml', 'Accept-Encoding' => 'None' } => $xml);

    if ($tx->res->is_success) {
        # do things
        # return result
    }
}

在其他包装中:

use Mojo::Base 'Mojolicious::Controller';

sub get_freebusy {
    my $c = shift;

    my $loc = $c->user_location;

    my $tx = $c->get_ews('xml/calendar');

    if ($tx->res->is_success) {
        # do things
        # return result
    }
}

和另一个软件包:

sub register {
    my ($self, $app, $conf) = @_;


    $app->helper('get_ews' => sub {
         my $c = shift;
         my $template = shift;
         my $url = Mojo::URL->new($c->app->config->{root});
         my $ua  = Mojo::UserAgent->new();
         my $xml = $c->render_to_string(template => $template, format => "xml");

         my $tx = $ua->post($url => {'Content-Type' => 'text/xml', 'Accept-Encoding' => 'None' } => $xml);

         if ($tx->res->is_success) {
             unless ($tx->res->dom->at('ResponseCode')->all_text eq 'NoError') {
                 $tx->res->code(500);
             }
         } else {
             # handle error
         }
         return $tx;
     });
}    

0 个答案:

没有答案