我正在使用HTML::FormHandler,我希望能够为表单动态设置默认值。这将是我希望能够做的一个很好的例子:
#this doesn't work
my $form = myapp::Form::Example->new(field1=>'default1',field2=>$default2);
在上面的示例中,field1
的值将保持“default1”,而field2
的值将保留标量$default2
所持有的值。但是,上面的例子没有这样做。有谁知道这样做的方法?谢谢!
答案 0 :(得分:2)
有很多方法可以设置默认值。您可以使用init_object:
my $form = MyApp::Form::Example->new;
$form->process( init_object => { field1 => 'default1', field2 => 'default2' }, ... );
您还可以使用“默认值”快捷键动态更新字段:
$form->process( defaults => { field1 => 'default1', field2 => 'default2' }, ... );
'init_object'代替数据库行(item),所以如果你也传递'item',你可能还需要设置'use_init_obj_over_item'标志。它使用object / form'value'格式,包括嵌套的hashrefs和arrayrefs。 'defaults'hashref需要一个flatned hashref,例如你从'fif'(填写形式)方法得到的。
请参阅https://metacpan.org/module/HTML::FormHandler::Manual::Defaults
答案 1 :(得分:0)
从文档中,Q中的代码是好的。请尝试使用以下方法调试问题。这将允许你偷看对象的“内部”,看看发生了什么。
我的猜测:默认值被实际数据覆盖或变量为空。
use Data::Dumper;
print Dumper($default2);
my $form = myapp::Form::Example->new(field1=>'default1',field2=>$default2);
print Dumper($form);