【问题标题】:Passing Variable of arbitrary Name to Template in Mojolicious在 Mojolicious 中将任意名称的变量传递给模板
【发布时间】:2019-07-17 21:03:59
【问题描述】:

我想显示三个数据库表的计数:DataMetaType

所以我很自然地将这些值存储起来,然后渲染它们(使用Mojolicious::Lite)。

$c->stash(data => $count_data,
          meta => $count_meta,
          type => $count_type,
 );

 $c->render(template => 'tblcount');

原来,data 是存储库中的保留关键字。 观察到的效果是,在渲染后只会显示$count_data 中的值...完全忽略模板。也没有错误。

这有点难以调试(我的理智花了大约一个小时左右)。 另外,我确定我不是第一个不小心误用 data 关键字(或任何其他关键字)的人。

我的问题:是否有任何安全的方法可以将任意名称的变量传递给模板?还是我只能忍受这种可能的名字冲突?

【问题讨论】:

    标签: mojolicious perl


    【解决方案1】:

    存储采用任意结构,因此您可以存储任意数据的散列。

    $c->stash(stuff => {data => $count_data, ...});
    

    然后在模板中使用$stuff->{data}

    【讨论】:

    • 非常感谢。会起作用,但这是一种解决方法,并不能“真正”解决实际问题。我最好不要这样做$c->stash(data => {stuff => $count_stuff, ...}); :-)
    • 没有办法将任意键安全地放入存储中。
    • 而 stash 是将变量放入模板的“方式”,对吧?我希望像$c->vars 这样的东西,这样会很安全。
    • render 命令的参数只是将这些值放入存储中,然后使用存储中的内容进行渲染。 Mojolicious 应用程序中没有其他直接访问权限。
    • 您实际上可以直接使用 $c->renderer->render 绕过将其 args 放入存储中,但这并不是真正支持的(您必须重新实现大部分 $c->render 并且它涉及当前实验性的 @987654328 @方法)。
    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2017-11-10
    • 2019-04-03
    • 2011-05-08
    • 2015-08-24
    • 1970-01-01
    • 2014-11-30
    • 2017-07-21
    相关资源
    最近更新 更多