Perl mojolious引用未始终定义的隐藏变量
我仍然在学习Mojolicous和MVC框架,所以这可能是一个问题,我认为这是错误的,所以如果我是,请建议一个更好的方法来做以下工作 我有一个route/route/:param,其中有时定义param,有时不定义param。我试图在该路由的模板中使用“param”,但我得到一个错误,即“param”需要显式的包名。我知道这是因为:param在路由中不匹配,因为当我调用/route/value时,一切正常 当定义了“param”和未定义“param”时,是否有一种方法可以同时使用相同的模板?我只是想根据“param”中的定义预先填充一个表单,但并不要求它这样做 在模板中,我有Perl mojolious引用未始终定义的隐藏变量,perl,mojolicious,Perl,Mojolicious,我仍然在学习Mojolicous和MVC框架,所以这可能是一个问题,我认为这是错误的,所以如果我是,请建议一个更好的方法来做以下工作 我有一个route/route/:param,其中有时定义param,有时不定义param。我试图在该路由的模板中使用“param”,但我得到一个错误,即“param”需要显式的包名。我知道这是因为:param在路由中不匹配,因为当我调用/route/value时,一切正常 当定义了“param”和未定义“param”时,是否有一种方法可以同时使用相同的模板?我只
<% if(defined($param)){ %><%= $param %><% } %>
谢谢。参考
stash(“param”)
总是安全的,其中是在Mojolicious::Plugin::DefaultHelpers中定义的helper函数
:
<%= stash "param" %>
<%= defined(stash("param")) && stash("param") %>
etc.
等
可以将(或)变量定义为epl空间/模板中的变量,以便在需要时可以重用。e、 g
% if (my $param = stash 'param') {
$param
% }
在这种情况下,仅当中定义了参数时才会呈现if条件块,否则将跳过它。在这种情况下,在路由中使用可能是最佳选择。如果占位符是在路由本身中定义的,则如果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')
,该函数修复了该占位符。非常感谢您的帮助。另一个选项是使用$app->defaults(param=>unde)
来确保模板中存在$param
。我想这有点像预先声明变量。