如何验证和呈现动态可扩展的zend表单

时间:2012-02-26 19:16:01

标签: zend-framework zend-form

我需要帮助我的动态可扩展的zend表单。

我有子表单的表单,其中包含两个元素:

<form>
  <fieldset class="itemGroup">
    <label>
      Question
      <input type="text"  name="items[questions][]" value="">
    </label>
    <label>
      Answer
      <input type="text"  name="items[answers][]" value="">
    </label>
  </fieldset>
</form>

我按照以下程序获得了它:

$itemsSubform = new Zend_Form_SubForm();
$form->addSubForm($itemsSubform, 'items');
$itemsSubform->setElementsBelongTo('items');

$itemQuestion = new Zend_Form_Element_Text('questions', array(
    'label' => 'Question',
    'isArray' => true,
    'filters' => array(
        'stringTrim',
    ),
    'validators' => array(
        array('stringLength', array('max' => 255)),
    ),
));

$itemAnswer = new Zend_Form_Element_Text('answers', array(
    'label' => 'Answer',
    'isArray' => true,
    'filters' => array(
        'stringTrim',
    ),
    'validators' => array(
        array('stringLength', array('max' => 255)),
    ),
));

$itemsSubform->addDisplayGroup(array($itemQuestion, $itemAnswer), 'itemGroup');

如果需要,我只需通过javascript复制扩展表单的所有字段集。

一切正常,直到我提交表格。在验证期间没有元素验证,并且在渲染表单中,由这样的数据填充,我从类Zend_View_Abstract获得错误消息,即转义值是数组而不是字符串(在渲染元素期间调用此方法以逃避其值)。

对于compltion,如果我调用$ form-&gt; getValues();验证后,(通过javascript添加另一个字段集)我得到了这个:

Array
(
    [items] => Array
        (
            [questions] => Array
            (
                [0] => lorem
                [1] => dolor
            )

            [answers] => Array
            (
                [0] => ipsum
                [1] => sit
            )

        )

)

有人可以告诉我如何表现形式吗?理想的解决方案是当表单本身分别验证每个值并找出他应该渲染fieldset(displayGroup)的次数。

1 个答案:

答案 0 :(得分:0)

首先,您的元素无法验证,因为您设置了isArray => TRUE并且您选择的验证程序会评估字符串。

接下来问题填充表单我认为可能是因为您需要提供数据以填充与表单生成的相同的多维数组(数组应该一对一映射)。

以下链接是一个如何动态构建表单的示例,您应该能够将其用作模板来生成表单以满足您的需求。

Example of generating form elements with loop

相关问题