jbl*_*lue 8 php zend-framework zend-form
在普通的html中,我们可以有一个数组字段 person[]
<input name="person[]" type="text" />
<input name="person[]" type="text" />
<input name="person[]" type="text" />
Run Code Online (Sandbox Code Playgroud)
据我所知,Zend_Form没有那个.我读了另一个答案,建议可以使用装饰器来完成,它会[]在正确的位置添加.这是该特定问题的代码
$html = ''; // some code html
$i = 0;
foreach ($element->getMultiOptions() as $value => $label){
$html .= '<input type="checkbox" '
. 'name="'.$element->getName().'[]" '
. 'id="'$element->getName()'-'.$i.'" '
. 'value="'.$value.'" />';
$i++;
}
return $html;
Run Code Online (Sandbox Code Playgroud)
这看起来是一个好的开始,但我想知道使用装饰器是否足够.返回的值必须正确读取并传递到服务器,然后在服务器端验证.装饰者的想法是错误的吗?自定义元素会更有意义吗?我还没有看到一个很好的例子来说明如何做到这一点.
Mar*_*cin 13
我认为ZF不允许创建命名的单个输入文本字段person[],尽管您可以为整个表单或子表单执行此操作.但是,它允许类似的东西.具体来说,您可以创建一个名为领域person[0],person[1]等等.
为此,您可以执行以下操作:
$in1 = $this->createElement('text', '0');
$in2 = $this->createElement('text', '1');
$in1->setBelongsTo('person');
$in2->setBelongsTo('person');
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您通常可以将验证器,过滤器等附加到$ in1或$ in2,它们将按预期工作.在您的操作中,在表单验证之后,您可以获取此人的输入文本字段的数组:
$values = $yourForm->getValues();
var_dump($values['person']);
Run Code Online (Sandbox Code Playgroud)
有趣的是,以下将不工作:
$in1 = $this->createElement('text', 'person[0]');
$in2 = $this->createElement('text', 'person[1]');
Run Code Online (Sandbox Code Playgroud)
希望这会帮助你.
| 归档时间: |
|
| 查看次数: |
7454 次 |
| 最近记录: |