您好我在过去几个小时内一直在搜索它,并且已经阅读了谷歌可以给我的所有匹配结果,但仍然无法让它工作。
我正在通过以下方式创建一个zend form select元素:
this->addElement('select','my_select', array(
'label' => 'Currency', 'value' => 'blue',
'multiOptions' => array( 'red' => 'Rouge', 'blue' => 'Bleu', 'white' => 'Blanc', ), ) );
现在我想通过
填充它$form->populate
来自控制器,我尝试过给出像
这样的双维数组$vals = array("my_select" => array("US Dollar", "Pound Sterling"))
然后将其提供给:
$form->populate($vals);
但是这没有用,我不确定这是否可行,目前我正在构建我的数组,就像在array( 'red' => 'Rouge', 'blue' => 'Bleu', 'white' => 'Blanc')
和zend表格一样的类,然后动态地将它传递给addElement multiOptions,因为这家伙在这里建议:
http://zendguru.wordpress.com/2009/03/06/zend-framework-form-working-with-dropdownselect-list/
这有效,但我想通过填充,如果有人可以建议我如何选择默认值,我将非常感激!
谢谢,
答案 0 :(得分:10)
populate方法允许您使用默认值IE:
“填充”表单$form->populate(array("my_select" => "red");
这会将my_select设置为选择“红色”。
修改强>
对于多维数组,我不确定你要做什么,你想要另一个select语句还是追加那些项?看起来它应该是另一个选择元素。
仔细看看,你想要的是设置选择populate方法中的值,这不是一个选项。但是你可以做这样的事情:
$currency = new Zend_Form_Element_Select('currency', array(
"label" => "Currency",
"required" => true,
));
$currency->addMultiOptions(array(
"US Dollar" => 1,
"Pound Sterling" => 2,
));
$form->addElements(array($currency));
$form->populate(array("currency" => "US Dollar"));
这将添加您的货币选择语句。这应该设置下拉(值数组可能来自数据库等),然后使用populate方法将US Dollar设置为默认值。
答案 1 :(得分:3)
对于像我这样即将浪费宝贵时间的人,请小心!如果您在select元素中添加了过滤器,则必须100%确保传递给populate()的数据包含过滤的值。如果你不这样做,你的下拉框就不会有任何选择! 在我的例子中,我有一个带有这些选项的select元素:
'' => 'Choisir un pays',
'France' => 'France',
'Madagascar' => 'Madagascar',
'Maroc' => 'Maroc'
但我也将StringToLower过滤器传递给元素...... 如果POST数据包含“Madagascar”值,则在populate()函数中传递“Madagascar”并且没有选择任何内容......但是由于这个StringToLower过滤器,我应该通过“madagascar”!
长话短说:小心选择元素上的过滤器:populate()可能会受到干扰。
其他修改:如果没有数据或任何非数字字符串数据传递给Int
,则会检查包含value="0"
过滤器和populate()
的复选框这个盒子......
由于这是一个复选框,我建议您避免使用Int
过滤器,而是使用InArray
验证程序。