【问题标题】:zend : populating a checkbox array with $form->populate(); from controllerzend : 使用 $form->populate() 填充复选框数组;从控制器
【发布时间】:2013-05-14 08:28:39
【问题描述】:

我们有一个带有文本输入字段和复选框数组的zend 表单,如下所示 -

<input class="checkbox_Category" type="checkbox" name="tag[]" value="19"> somename1 <br/>
<input class="checkbox_Category" type="checkbox" name="tag[]" value="20"> somename2 <br/>
<input class="checkbox_Category" type="checkbox" name="tag[]" value="21"> somename3 <br/>

并使用

$formObject->populate($formDataArray);

在控制器中填充整个表单中的数据。所有文本输入字段似乎都填充得很好,但复选框却没有。在 $formDataArray 中,复选框的数据格式为

[标签] => 数组([0] => 20 [1] => 19)

连同其他表单数据,如 - [firstName] => 'somename' 等。 我无法弄清楚表单所期望的数据格式,以便填充 populate();

【问题讨论】:

  • 您的格式是正确的,所以问题不在您发布的代码中。如果您勾选了一些复选框并提交表单,但缺少必填字段(因此重新显示表单),这些复选框是否仍处于勾选状态?

标签: php zend-framework checkbox zend-form


【解决方案1】:

嗨,您作为数组给出的名称可能有问题,请更改如下

<input class="checkbox_Category" type="checkbox" name="tag" value="19"> somename1 <br/>
<input class="checkbox_Category" type="checkbox" name="tag" value="20"> somename2 <br/>
<input class="checkbox_Category" type="checkbox" name="tag" value="21"> somename3 <br/>

如果我能进一步帮助你,请告诉我

【讨论】:

  • 嗨..我确定数组是必需的,因为这就是我们迭代并获取已检查值的方式。
  • 但是当我使用 zend 表单时,它对我来说很好用,比如 $objEthnicity = new Zend_Form_Element_MultiCheckbox("ethnicity"); $objEthnicity ->addMultiOptions($ethnicity) ->setLabel($this->translate('LABEL_ETHNICITY')) ->setValue(explode("#",$profileData['ethnicity'])) ->addFilter('StripTags' ) ->removeDecorator('DtDdWrapper') ->removeDecorator('HtmlTag') ->removeDecorator('Label') ->setAttrib("no","2");
【解决方案2】:

没有真正看到您的 Zend_Form 代码,这是非常困难的。然而,我经常看到人们将 Zend Framework 中的“checkbox”元素与“multiCheckbox”元素混淆。我知道 - 这有点令人困惑 - 但复选框是一个具有开/关值的复选框。 MultiCheckbox 处理多个值 - 我认为这是您想要完成的。让我向您展示一个可以在上面生成 HTML 的快速表单。

class Application_Form_Test extends Zend_Form
{
    public function init()
    {
        $this->setMethod('post');

        $multiOptions = array(
            19 => 'somename1',
            20 => 'somename2',
            21 => 'somename3'
        );

        $this->addElement('multiCheckbox', 'tag', array(
            'multiOptions'=>$multiOptions
        ));

        $this->addElement('submit', 'submitbutton');
    }
}

现在,如果你使用类似...

$form->populate($this->getRequest()->getPost());

在您的控制器中,它将按预期填充。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 2019-01-07
    • 2020-05-18
    • 2011-01-29
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多