5

我要渲染:

<input type="text" value="" name="foo[]" />
<input type="text" value="" name="bar[]" />

但是 Zend_Form_Element 需要一个(字符串)名称,所以我需要这样做:

$this->addElement('text', '1', array(
    'belongsTo' => 'foo'
));

$this->addElement('text', '2', array(
    'belongsTo' => 'bar'
));

但输出是:

<input id="foo-1" type="text" value="" name="foo[1]" />
<input id="bar-2"  type="text" value="" name="bar[2]" />

我也可以接受如下输出:

<input id="foo-1" type="text" value="" name="foo[1]" />
<input id="bar-1"  type="text" value="" name="bar[1]" />

但是 Zend_Form_Element 重写同名元素

有没有办法做我需要的?

4

2 回答 2

7

对于多个值:

$foo = new Zend_Form_Element_Text('foo');
// Other parameters
$foo->setIsArray(TRUE);
$this->addElement($foo);

生成:name="foo[]"

--

如果您正在寻找给定的键,例如name="foo[bar]",请使用:

$bar= new Zend_Form_Element_Text('bar');
// Other parameters
$bar->setBelongsTo('foo');
$this->addElement($bar);

--

在 ZF 1.11.5 上测试

于 2011-05-16T18:34:02.073 回答
0

类 MyFooForm 扩展 Zend_Form { public function init() { $fullNameOpts = array( 'required'=>false, 'label'=>'fullName', 'isArray'=>true, 'validators' => array( array('stringLength ', 假, 数组(1, 250) ) ) ); $this->addElement('text' ,'fullName',$fullNameOpts); // 其余的元素、表单和其他东西都放在这里 } }

这确实创造了

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

它在 Element.php 的 Form 中,第 512 行“isArray”检查。我正在使用常规的zend_form,带有自定义验证器的crossValidation,并且我正在推动子表单来复制主表单,因为用户可以多次添加同一个表单。另外,我懒得研究自定义装饰器,我已经创建了一个,但是它杀死了子表单和数组表示法,所以我只坚持常规的,这就解决了。

我在 Zf 1.10。

于 2010-06-22T01:34:10.787 回答