我仍在学习一般的mojolicious和MVC框架所以这可能是一个问题,我正在考虑这个错误,所以如果我请建议一个更好的方法来做以下。
我有一个route / route /:param,其中param有时被定义,有时不定义。我试图在该路线的模板中使用“param”,但我得到一个错误,说“param”需要显式包名。我知道这是由于:param在路由中没有匹配,因为当我调用/ route / value时一切正常。
当“param”定义和未定义时,是否有办法可以为两者使用相同的模板?我只是试图预先填充“param”中定义的表单,但不要求它。
在模板中我有
<% if(defined($param)){ %><%= $param %><% } %>
感谢。
答案 0 :(得分:17)
引用stash("param")
始终是安全的,其中stash
是Mojolicious::Plugin::DefaultHelpers
中定义的辅助函数:
<%= stash "param" %>
<%= defined(stash("param")) && stash("param") %>
etc.
答案 1 :(得分:2)
在这种情况下,似乎在路线中使用optional placeholder可能是最佳选择。如果在路径本身中定义占位符,则如果在URL中未给出占位符,则将使用该定义(否则使用URL中指定的值)。
例如:
$r->any('/page/:paramVar')->to('page#doTheThing', paramVar => 'cake');
如果加载了地址“/ page”,那么$self->param('paramVar') == 'cake'
如果加载了“/ page / tree”则为$self->param('paramVar') == 'tree'
。
注意:与其他占位符值一样,可以通过stash函数和param函数访问可选占位符(例如上例中使用的paramVar):$self->stash('paramVar')
。
答案 2 :(得分:1)