如何填充zend表单选择元素?

时间:2010-08-13 16:19:18

标签: php zend-framework select

您好我在过去几个小时内一直在搜索它,并且已经阅读了谷歌可以给我的所有匹配结果,但仍然无法让它工作。

我正在通过以下方式创建一个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/ 这有效,但我想通过填充,如果有人可以建议我如何选择默认值,我将非常感激!

谢谢,

2 个答案:

答案 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验证程序。