【问题标题】:How to populate zend form select element?如何填充 zend 表单选择元素?
【发布时间】:2011-03-29 13:43:42
【问题描述】:

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

我正在通过以下方式创建一个 zend 表单选择元素:

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/ 这行得通,但我想通过填充来实现它,如果有人能建议我如何选择默认值,我将非常感激!

谢谢,

【问题讨论】:

标签: php zend-framework select


【解决方案1】:

对于像我这样即将浪费数小时宝贵时间的人,请小心!如果您将过滤器添加到您的选择元素,您必须 100% 确定传递给 populate() 的数据包含 已过滤 值。如果你不这样做,你的下拉框不会有任何选定的选项! 就我而言,我有一个带有这些选项的选择元素:

'' => 'Choisir un pays',
'France' => 'France',
'Madagascar' => 'Madagascar',
'Maroc' => 'Maroc'

但我也将 StringToLower 过滤器传递给元素... 如果 POST 数据包含“马达加斯加”值,则在 populate() 函数中传递了“马达加斯加”,并且没有选择任何内容......但是由于这个 StringToLower 过滤器,我应该传递“马达加斯加”!

长话短说:小心选择元素上的过滤器:populate() 可能会受到干扰

附加编辑:如果没有数据或任何非数字字符串数据被传递给此框的populate(),则会检查带有Int过滤器和value="0"的复选框... 由于这是一个复选框,我建议避免使用Int 过滤器,而使用InArrayvalidator。

【讨论】:

    【解决方案2】:

    populate 方法允许您使用默认值 IE“填充”表单:

    $form->populate(array("my_select" => "red"); 
    

    这会将 my_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 方法将美元设置为默认值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      相关资源
      最近更新 更多