Zend_Form数组表示法和空元素名称

时间:2009-10-28 17:13:11

标签: zend-form zend-form-sub-form

我想渲染:

<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重写了具有相同名称的元素

有办法做我需要的吗?

2 个答案:

答案 0 :(得分: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上测试

答案 1 :(得分:0)

类MyFooForm扩展Zend_Form {           public function init(){           $ fullNameOpts = array(                    '必要'=&GT;假,                    '标签'=&GT; '全名',                    'IsArray的'=&GT;真,                    'validators'=&gt; array(array('stringLength',false,array(1,250)))           );      $ this-&gt; 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。