我想创建一个表单,允许用户使用数组表示法输入任意数量的值,每个值都在一个单独的文本字段中。预期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>
是否有(最好是简单的)方法来实现我之后的无索引数组符号?
答案 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';