没有索引的Zend_Form数组表示法

时间:2011-05-18 08:57:18

标签: arrays zend-framework zend-form

我想创建一个表单,允许用户使用数组表示法输入任意数量的值,每个值都在一个单独的文本字段中。预期HTML输出的示例是:

<dd id="dupa-element">
    <input type="text" name="dupa[]" value="">
    <input type="text" name="dupa[]" value="">
</dd>

但是,我似乎找不到在单个元素中引入多个输入元素的方法,使用不带索引的数组表示法。

目前,我这样做:

$elt1 = new Zend_Form_Element_Text('1');
$elt1->setOptions(array('belongsTo' => 'dupa'));

$elt2 = new Zend_Form_Element_Textarea('2');
$elt2->setOptions(array('belongsTo' => 'dupa'));

虽然这有效,但Zend_Form将这些视为独立元素(可以有不同的验证器和过滤器集 - 这很酷),结果HTML就是这样的:

<dd id="dupa-1-element">
    <input type="text" name="dupa[1]" id="dupa-1" value="">
</dd>
<dd id="dupa-2-element">
    <input type="text" name="dupa[2]" id="dupa-2" value="">
</dd>

是否有(最好是简单的)方法来实现我之后的无索引数组符号?

3 个答案:

答案 0 :(得分:3)

我会关注MWOP's tutorial on creating composite elements。更多的工作,但它更少的试验和错误然后akond的解决方案。对我来说基本的想法是扩展Zend_Form_Element_Multi(你想要的是Zend_Form_Element_Multiselect / MultiCheckbox如何工作)。

答案 1 :(得分:2)

我设法通过使用“容器子窗体”,然后将子窗体添加到该“容器”,例如:

$container = new Zend_Form_SubForm();
$subform1 = new Zend_Form_SubForm();
$container->addSubForm($subform1, '1');

$subform2 = new Zend_Form_SubForm();
$subform2->addSubForm($subform1, '2');

$mainForm = new Zend_Form();
$mainForm->addSubform($container,'mysubforms');

希望有所帮助。

答案 2 :(得分:1)

您需要一个自定义视图助手。

class Zend_View_Helper_FormMySelect extends Zend_View_Helper_Abstract
{
    function formMySelect ($name, $value = null, $attribs = null, $options = null, $listsep = "<br />\n")
    {
        $result = array ();
        foreach ($options as $option)
        {
            $result [] = sprintf ('<input type="text" name="%s[]" value="">', $name);
        }

        return join ($listsep, $result);
    }
}

比你的形式更像:

    $form = new Zend_Form();
    $form->addElement ('select', 'test', array (
    'label'     => 'Test',
    'multioptions' => array (
        'test 1',
        'test 2',
        'test 3',
    ),
    ));

    $form->test->helper = 'formMySelect';