gpt4 book ai didi

perl - Mojolicious 收到帖子结果

转载 作者:行者123 更新时间:2023-12-01 10:49:07 25 4
gpt4 key购买 nike

我来自 perl Cgi,我从 mojolicious(以及网络框架)开始,使用这个 github 作为例子: https://github.com/webdevesgi/mojolicious-demo

我有这个模板:

  % layout 'menu2';
<hr/>


% if ( stash 'result' ) {
<li><%= stash 'result' %></li>
% } else {
<li>bar</li>
% }
<ul>
% foreach my $url (keys %$urls) {
<li><%= $urls->{$url}->{'url_origin'} %> - <a target="blank" href="http://localhost:3000/l/<%= $urls->{$url}->{'url_short'} %>">!<%= $urls->{$url}->{'url_short'} %></a> (<%= $urls->{$url}->{'clics'} %> clics)</li>
% }
</ul>
<br/>

<%= form_for sendurl => (method => 'post', class => 'well form-search' target = "_self") => begin %>
<p>Raccourcir une url :
<%= text_field 'orig_url', class => 'input-xlarge' %>
<%= submit_button 'GO', class => 'btn btn-warning' %>
</p>



<% end %>

我想在发帖后在这个模板中查看操作的结果,使用以下几行:

% if ( stash 'result' ) { 
<li><%= stash 'result' %></li>
% } else {
<li>bar</li>
% }

这是 sendurl 的代码:

sub sendurl{
my $self = shift;

my $url = Mojo::URL->new($self->param('orig_url'));
if(!$url->is_abs){
return $self->redirect_to('dashboard');
}

my $short_url = encodeurl($self->param('orig_url'));

$self->urls->addUrl($self->session('user'), $self->param('orig_url'), $short_url);


my $params = $self->req->params->to_hash;

if ($params) {
$self->stash( 'result' , "Errors - not sent" );
open F, q[>],'log.txt';print F Dumper $self;close F;
}

$self->redirect_to('dashboard', result=> "Errors - not sent");

}

在 log.txt 中,我可以看到具有以下值的存储:

 'stash' => {
'mojo.session' => {
'user_type' => 'admin',
'user' => 'foo'
},
'mojo.captures' => {
'controller' => 'login',
'action' => 'sendurl'
},
'menu' => $VAR1->{'app'}{'defaults'}{'config'}{'app_menu'}{'admin'},
'urls' => {
'' => {
'url_short' => '!532f1b4f',
'id' => undef,
'url_origin' => 'www.foo.bar/baz',
'clics' => undef
}
},
'mojo.active_session' => 2,
'mojo.started' => [
1395596194,
529165
],
'controller' => 'login',
'mojo.routed' => 1,
'action' => 'sendurl',
'mojo.secret' => 'login',
'config' => $VAR1->{'app'}{'defaults'}{'config'},
'result' => 'Errors - not sent'
},

但是在浏览器中我看不到result的值

我怎样才能做到这一点?我如何将结果从 sendurl 传递到 View ,并在 View 中检查是否定义了存储中的结果变量?这是与 mojolicious 合作的最佳方式?

最佳答案

现在有时间进一步研究问题。正如您所发现的,stash 条目不会在 redirect_to 中保留下来,但您可以改用 flash

我也对代码做了一些小改动,至少去掉了一些最奇怪的东西。在这些更改之后,morbo 的调试输出看起来很正常。

lib/Login.pm

不要调用 Controller 操作来检查用户是否登录,而是使用一个简单的回调:

my $logged_in = $r->under->to(cb => sub {
my $self = shift;
return defined $self->session('user');
});

lib/Login/Login.pm

logged_in 子重命名为 dashboard(修复了 action not found 错误),并添加了适当的 render 最后调用(呈现 login/dashboard 模板)。

sub dashboard {
my $self = shift;
$self->stash(
urls => $self->urls->getUrls($self->session('user')),
);
return $self->render;
}

sub send_url 中,我将 $self->stash(result => 更改为 flash:

my $params = $self->req->params->to_hash;
if ($params) {
$self->flash(result => "Errors - not sent");
}

templates/login/dashboard.html.ep

您对 result 的检查变为:

<li><%= flash('result') // 'result not in flash' %></li>

还有一些最后的建议:

  • 可以很多改进数据库访问。使用优秀Mojolicious::Plugin::Database而不是试图弄清楚如何让事情与 prefork/hypnotoad 一起工作。
  • 永远,永远,永远不要将 Mojolicious 源代码直接解压到您的应用程序中! (或检查 VCS...)
  • 使用适当的构建环境(EU::MM、M::B 等)。
  • 阅读 Mojolicious 文档,开始小规模编码 (Mojolicious::Lite),并在必要时将其发展为完整的应用程序(遵循 Mojolicious::Guides::Growing 中的指南)。

祝你好运!

关于perl - Mojolicious 收到帖子结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22596077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com