Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl mojolious引用未始终定义的隐藏变量_Perl_Mojolicious - Fatal编程技术网

Perl mojolious引用未始终定义的隐藏变量

Perl mojolious引用未始终定义的隐藏变量,perl,mojolicious,Perl,Mojolicious,我仍然在学习Mojolicous和MVC框架,所以这可能是一个问题,我认为这是错误的,所以如果我是,请建议一个更好的方法来做以下工作 我有一个route/route/:param,其中有时定义param,有时不定义param。我试图在该路由的模板中使用“param”,但我得到一个错误,即“param”需要显式的包名。我知道这是因为:param在路由中不匹配,因为当我调用/route/value时,一切正常 当定义了“param”和未定义“param”时,是否有一种方法可以同时使用相同的模板?我只

我仍然在学习Mojolicous和MVC框架,所以这可能是一个问题,我认为这是错误的,所以如果我是,请建议一个更好的方法来做以下工作

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

当定义了“param”和未定义“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
。我想这有点像预先声明变量。