一般来说,我仍然在学习mojolicious和MVC框架,所以这可能是一个问题,我认为这是错误的,所以如果我是这样的话,请建议一个更好的方法来做下面的事情。
我有一个route /route/:param,其中有时定义param,有时不定义。我试图在该路由的模板中使用"param“,但我得到一个错误,说"param”需要显式的包名。我知道这是由于:param在路由中不匹配,因为当我调用/ route /value时,一切都很正常。
在定义了"param“和没有定义”param“的情况下,有没有办法同时使用相同的模板?我只是试着从"param“中定义的内容中预先填充一个表单,而不是让它成为必需的。
在我拥有的模板中
<% if(defined($param)){ %><%= $param %><% } %>谢谢。
发布于 2013-06-05 23:12:47
引用stash("param")始终是安全的,其中stash是在Mojolicious::Plugin::DefaultHelpers中定义的助手函数
<%= stash "param" %>
<%= defined(stash("param")) && stash("param") %>
etc.发布于 2013-09-27 12:02:44
可以将stash (或flash)变量定义为epl空间/模板中的Perl变量,以便在需要时可以重用。例如,
% if (my $param = stash 'param') {
$param
% }在这种情况下,只有在stash中定义了参数时,才会呈现if条件块,否则将跳过它。
发布于 2015-03-28 09:47:33
在这种情况下,在路由中使用optional placeholder可能是最好的选择。如果占位符是在路由本身中定义的,则在url中没有给出占位符的情况下将使用该定义(否则将使用URL中指定的值)。
例如:
$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')来访问。
https://stackoverflow.com/questions/16943439
复制相似问题