2014-07-05 43 views
2

我有一段代码使用CGI::Application作为它的基础,但是某些功能无法正常工作。CGI ::应用程序参数()未设置

当我尝试通过$Template->param()设置某些东西时,它似乎没有设置。 $Template等于$self->load_tmpl($template);

而且这块我要救的是:

$Template->param('symbols' => \%a_hash_ref); 

我知道\%a_hash_ref包含预期值。它有一个类似的形式:

{'symbol' => 'DTX'},{'symbol' => 'QFLD'} 

而且,如果我做

$Template->param('Hey!xD' => 'Something'); 

它不保存,但

$Template->param($Pagination); 

确实,这里$Pagination也是hash_ref。

我知道所有的值都是他们应该是的,我也尝试了一些简单的字符串,这应该工作,但他们没有设置。我知道,当我跑这是因为:

my @params = $Template->param(); 
die Dumper \@params; 

它输出它应该已经建立了所有的变量,但所预计的(包括'Hey!xD'字符串)失踪。我也知道它实际上运行的代码,因为这个模具翻斗车是我尝试设置值后。

模板文件包含这段代码:

$(文件)。就绪(函数(){mainFunction( '[%符号%]'); });

任何帮助,将不胜感激。

编辑:

这就是被给予PARAM:

[ { '日期'=> '2006-07-05', 'avg_gain'=>是undef , 'bollinger_mid'=> '32 0.80000' , '符号'=> 'BBQ' },{ '日期'=> '2006-04-04', 'avg_gain'=>是undef, “bollinger_mid '=> '34 .55656', '符号'=> 'AAPL' } ... ]

回答

2

这实际上是一个HTML ::模板的问题,这CGI ::应用程序使用默认的模板。

您是否在load_tmpl调用中将die_on_bad_params设置为0?如果您尝试设置一个参数,该参数在加载的模板中不存在(默认为docs here),那么HTML :: Template应该默认为死。当die_on_bad_params被禁用时,你会得到你正在描述的行为,其中未知模板参数被忽略和丢弃。

此外,according to the docs,TMPL_LOOP将hashref的arrayref作为其参数param。也许这将有助于通过您的“符号”参数是这样的:

my $symbols = [{ symbol => 'DTX' },{ symbol => 'QFLD' }]; 
$Template->param(symbols => $symbols); 

如果您发布的样本模板和小脚本,显示您可以更轻松地告诉某些错误。

+0

是的,我把它设置为0!谢谢!如果在尝试设置模板中尚不存在的参数时它会死掉,那么我该如何设置该参数呢? 我阅读文档,我不明白为什么$ Template-> param('symbols')不存在。在我的模板中,我有这个: fetchQuoteData('[%symbol%]'); < /TMPL_LOOP> – Sismetic

+0

嗨,我从文档中添加了一些'TMPL_LOOP'信息,可能有所帮助。 – wes

+0

当然,非常感谢您的帮助。我显然发送了hashref的arrayref。我将代码编辑为 – Sismetic