首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mojolicious引用不总是定义的stash变量

mojolicious引用不总是定义的stash变量
EN

Stack Overflow用户
提问于 2013-06-05 23:07:36
回答 3查看 2.9K关注 0票数 10

一般来说,我仍然在学习mojolicious和MVC框架,所以这可能是一个问题,我认为这是错误的,所以如果我是这样的话,请建议一个更好的方法来做下面的事情。

我有一个route /route/:param,其中有时定义param,有时不定义。我试图在该路由的模板中使用"param“,但我得到一个错误,说"param”需要显式的包名。我知道这是由于:param在路由中不匹配,因为当我调用/ route /value时,一切都很正常。

在定义了"param“和没有定义”param“的情况下,有没有办法同时使用相同的模板?我只是试着从"param“中定义的内容中预先填充一个表单,而不是让它成为必需的。

在我拥有的模板中

代码语言:javascript
复制
<% if(defined($param)){ %><%= $param %><% } %>

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-05 23:12:47

引用stash("param")始终是安全的,其中stash是在Mojolicious::Plugin::DefaultHelpers中定义的助手函数

代码语言:javascript
复制
<%= stash "param" %>
<%= defined(stash("param")) && stash("param") %>
etc.
票数 20
EN

Stack Overflow用户

发布于 2013-09-27 12:02:44

可以将stash (或flash)变量定义为epl空间/模板中的Perl变量,以便在需要时可以重用。例如,

代码语言:javascript
复制
% if (my $param = stash 'param') {                                  
    $param
% }

在这种情况下,只有在stash中定义了参数时,才会呈现if条件块,否则将跳过它。

票数 2
EN

Stack Overflow用户

发布于 2015-03-28 09:47:33

在这种情况下,在路由中使用optional placeholder可能是最好的选择。如果占位符是在路由本身中定义的,则在url中没有给出占位符的情况下将使用该定义(否则将使用URL中指定的值)。

例如:

代码语言:javascript
复制
$r->any('/page/:paramVar')->to('page#doTheThing', paramVar => 'cake');

如果加载了地址"/page“,则$self->param('paramVar') == 'cake';否则,如果加载了"/page/tree”,则使用$self->param('paramVar') == 'tree'

注意:与其他占位符的值一样,一个可选的占位符,比如上面示例中使用的paramVar,可以通过stash函数和参数函数:$self->stash('paramVar')来访问。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16943439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档